我正在尝试构建一个连接到同一个表的select查询,如果连接表中有两个不同的记录,如果没有,则返回null。它是这样的:
SELECT t1.title, t3a.name, t3b.name
from t1
join t2a on t1.id = t2a.id
join t2b on t1.id = t2b.id
join t3a on t2a.xid = t3a.xid
join t3b on t2b.xid = t3b.xid
我将省略所有连接类型的排列以及我尝试过的语句限定符(没有一个有效),但要点是:
t1在t2-> t3中始终具有至少一个对应的记录关系,有时两个。我希望我的结果是:
Title | Related Record 1 | Related Record 2 (if exists)
我得到的是有时候我想要的东西,但更多的是
Title | Related Record 1 | Related Record 1
无论t2 / t3中是否存在两个不同的相关记录集,都会发生这种情况。但是在同一个查询中,有时会返回不同的记录,有时第一个结果会重复两次。
这有意义吗?我为我的问题的基本性质道歉: - )
答案 0 :(得分:1)
如果我正确理解了问题和评论,那么查询确实是:
select t1.title, t3a.name, t3b.name
from t1 join
t2 t2a
on t1.id = t2a.id join
t2 t2b
on t1.id = t2b.id join
t3 t3a
on t2a.xid = t3a.xid join
t3 t3b
on t2b.xid = t3b.xid;
我认为使用相同的join
条件两次加入相同的表没有任何价值,因此我怀疑您使用以下方法得到相同的结果(可能是重复次数较少):
select t1.title, t3.name
from t1 join
t2 t2
on t1.id = t2.id join
t3 t3
on t2.xid = t3.xid;
如果有多个匹配项,则这些匹配项将显示在不同的行上。要将它们放在一行,您可以使用聚合:
select t1.title, min(t3.name) as name1,
(case when min(t3.name) <> max(t3.name) then max(t3.name) end) as name2
from t1 join
t2 t2
on t1.id = t2.id join
t3 t3
on t2.xid = t3.xid
group by t1.title
如果只有一个名称,则条件只会生成第三列NULL
。