gpt4 book ai didi

sql - 可以包含空子集的多个外部联接

转载 作者:行者123 更新时间:2023-12-04 05:28:40 26 4
gpt4 key购买 nike

我有一个对象表和一个属性表,其中包含对象可能具有或不具有的各种属性。

我想随对象一起获取所有属性,如果没有该属性,则为 null。

我第一次尝试查询是这样的:

SELECT o.Id ,
aa.Value AS AttributeA,
ab.Value AS AttributeB,
ac.Value AS AttributeC
FROM Objects o
LEFT OUTER JOIN Attributes aa
ON (o.Id = aa.ObjectId)
LEFT OUTER JOIN Attributes ab
ON (o.Id = ab.ObjectId)
LEFT OUTER JOIN Attributes ac
ON (o.Id = ac.ObjectId)
WHERE (aa.AttributeTypeId = 1 OR aa.AttributeTypeId IS NULL)
AND (ab.AttributeTypeId = 2 OR ab.AttributeTypeId IS NULL)
AND (ac.AttributeTypeId = 3 OR ac.AttributeTypeId IS NULL)
AND o.Id = @objectId

这样做的问题是,如果还没有对象,比如说属性 a,那么 aa 子集是空的,所以只返回根本没有属性的对象。

我怎样才能让 SQL Server 返回所有对象,即使混合了属性场景而不进入大量 UNION(属性类型的数量是 20+)?

最佳答案

在过滤外部联接的目标时,您应该将过滤器放在联接上。

即:

FROM Objects o 
LEFT OUTER JOIN Attributes aa
ON (o.Id = aa.ObjectId) and (aa.AttributeTypeId = 1)

关于sql - 可以包含空子集的多个外部联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12895570/

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