gpt4 book ai didi

sql - 一起使用 SQL JOIN 和 UNION

转载 作者:行者123 更新时间:2023-12-02 15:35:13 24 4
gpt4 key购买 nike

好吧,我很困惑为什么会出现以下行为。

我有一个“交易标题”表和“交易详细信息”表。对于某个功能,明细表需要进行一些规范化才能提取“备注”数据。每个详细记录最多可以有 3 个备注,由 TranRemark1、TranRemark2 和 TranRemark3 列指定。

我将以下查询放在一起,认为它可以工作,但它返回的记录数不正确。

SELECT  
b.ClientName,
a.TranID,
a.TranRemark1,
a.TranDateOfService,
a.TranPayment
FROM
(select TranRemark1, TranID from TranDetail
union all
select TranRemark2, TranID from TranDetail
union all
select TranRemark3, TranID from TranDetail) AS a
LEFT JOIN TranHeader AS b ON
b.TranID = a.TranID
WHERE a.TranRemark1 = @RemarkCode;

我得到的结果集基于与 ClientName 匹配的 TranHeader 记录数,而不是与 TranDetail 中的 where 子句匹配的记录数。例如,如果客户“Acme Inc.”头表中有 3 条记录,我使用上面的查询来获取备注代码“1234”(仅匹配 TranDetail 中的 1 条记录),结果集列出了正确的记录 3 次。

编辑所以我希望从上面的例子中得到这样的结果集:

ClientName--TranID--TranRemark1--TranDateOfService--TranPayment
Acme Inc ADC11 1234 8-16-2011 45.11

我得到的是这样的:

ClientName--TranID--TranRemark1--TranDateOfService--TranPayment
Acme Inc ADC11 1234 8-16-2011 45.11
Acme Inc ADC11 1234 8-16-2011 45.11
Acme Inc ADC11 1234 8-16-2011 45.11

请记住,TranHeader 中一个客户端可以有多个记录。

我尝试过正确加入和完全加入,但结果都是一样。

我哪里漏掉了问题?

感谢您的帮助。

最佳答案

您可以尝试更换:

LEFT JOIN TranHeader AS b ON
b.TranID = a.TranID
WHERE a.TranRemark1 = @RemarkCode;

与:

LEFT JOIN
( SELECT DISTINCT
TranId, ClientName
FROM TranHeader
) AS b ON
b.TranID = a.TranID
WHERE a.TranRemark1 = @RemarkCode;

关于sql - 一起使用 SQL JOIN 和 UNION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7082522/

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