gpt4 book ai didi

sql - 在查找值上连接两个 SQL 表的最聪明方法

转载 作者:行者123 更新时间:2023-12-04 19:20:07 26 4
gpt4 key购买 nike

我在 Sql Server 2008 中有两个表

Items
------
ItemNo
StartDate


Translation
-------
ItemNo
StartDate
Language
Description

在 Translations 表中,每个产品都有多个翻译,即。
ItemNo: 123
StartDate: 2011-11-02
Language: SE
Description: 'Bla1'
ItemNo: 123
StartDate: 2011-11-02
Language: DK
Description: 'Bla2'

如何构建一个快速选择语句,为每个产品输出一行而不使用太多查找,例如
    Itemno  StartDate  DK     SE
------------------------------------
123 2011-11-02 Bla1 Bla2

提前谢谢
延斯

最佳答案

这是一个使用 XML 来做你想做的事情的版本。我还没有针对评论部分中建议的其他方法测试性能。

不明白为什么StartDate应该在两个表中,除了它是 Items 中 PK 的一部分 table 。如 StartDate不是 PK 的一部分,您可以安全地将其从所有连接中删除。

declare @Items table
(
ItemNo int,
StartDate date
)

declare @Translation table
(
ItemNo int,
StartDate date,
Language varchar(2),
Description varchar(20)
)

insert into @Items values
(123, '2011-11-02')

insert into @Translation values
(123, '2011-11-02', 'DK', 'Bla1'),
(123, '2011-11-02', 'SE', 'Bla2')


select I.ItemNo,
I.StartDate,
T.Trans.value('(Trans[@Language="DK"]/Desc)[1]', 'varchar(20)') as DK,
T.Trans.value('(Trans[@Language="SE"]/Desc)[1]', 'varchar(20)') as SE
from @Items as I
inner join (select T1.ItemNo,
T1.StartDate,
(select T2.Language as '@Language',
T2.Description as 'Desc'
from @Translation as T2
where T1.ItemNo = T2.ItemNo and
T1.StartDate = T2.StartDate
for xml path('Trans'), type) as Trans
from @Translation as T1
group by T1.ItemNo,
T1.StartDate) as T
on I.ItemNo = T.ItemNo and
I.StartDate = T.StartDate

关于sql - 在查找值上连接两个 SQL 表的最聪明方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6814307/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com