TSQL专家,我面对着两个看起来像这样的表:
表格-名称
ID(pk) Name
1 Peter
2 Paul
3 Mary
4 John
5 Fred
桌子-汽车
NameID(pk) FieldNum CarText
1 1 Ford
1 2 abcd123
1 3 Mustang
1 4 1967
1 6 Yellow
2 2 qwer456
2 4 1980
3 1 Chevrolet
3 3 Camaro
4 1 Chrysler
4 2 zxcv789
5 4 1970
由于第一个(名称)表中的所有名称都是必需的,但是第二个表中只涉及FieldNum = 2(如果存在),因此所需的输出将类似于以下内容:
Name CarText
---------------------
Peter abcd123
Paul qwer456
Mary
John zxcv789
Fred
或者为此,在这些行上使用某种形式的空占位符的输出也将可用:
Name CarText
---------------------
Peter abcd123
Paul qwer456
Mary foo
John zxcv789
Fred foo
各种文档建议将表联接更改为LEFT(或LEFT OUTER)联接是解决方案。没问题。
SELECT Name, CarText
FROM Names
LEFT JOIN Cars on Names.ID = Cars.NameID
WHERE Cars.FieldNum = 2
但是这种方法可以实现:
Name CarText
---------------------
Peter abcd123
Paul qwer456
John zxcv789
因此,在对RANK(),ROWNUM,CASE和WHERE EXISTS / NOT EXISTS语句进行了业余试验之后,感觉答案很尴尬,但是几天后我就无法确定。
如何实现所需的输出,其中一个表是强制性的,而联接表仅在存在/存在时(或在必要时代替某种相关字段,而是某种无效值)才提供相关字段? / p>
答案 0 :(得分:3)
Completable.empty()
子句将WHERE
变成了LEFT JOIN
。要保留不匹配的行,请将条件移至INNER JOIN
子句:
ON