对不起,我真的不知道用什么关键字来寻找我的问题的帮助。
我正在构建一个SQL视图,以便在其他具有过滤功能的软件中使用。我想将这个视图用于多种目的,所以我有一些不同寻常的想法:
最初,我想LEFT OUTER JOIN两个表。但是:即使SQL找到匹配项,我还是想要一个额外的记录,它还没有来自Right表的数据。这是一个例子:
T1:
pk data
1 a
2 b
3 c
t2:
pk fk data
1 a line1
2 a line2
3 c line3
4 c line4
5 c line5
这是我目前得到的: 查询:
select t1.data, t2.data from t1 left outer join t2 on t1.data = t2.fk
返回:
t1.data t2.data
a line1
a line2
b <NULL>
c line3
c line4
c line5
我真正想要归还的内容:
t1.data t2.data
a <NULL>
a line1
a line2
b <NULL>
c <NULL>
c line3
c line4
c line5
我想得到这个结果的原因是我可以使用其他软件中的View并仅使用t2.data = NULL过滤记录
有谁知道我怎么做到这一点?我不想手动加入软件,因为它的性能效率低到最终用户无法达到的程度。
感谢您的帮助。
P.S。我想用一个subselect来替换右表,Full outer加入一个不匹配的top(1)选项,但我无法弄清楚如何正确地做到这一点: - /
答案 0 :(得分:2)
您的答案是这样的:使用INNER JOIN
,这样您就不会获得带有NULL的记录,然后在t1上使用UNION强制使用NULL t2.data列。
SELECT t1.data, t2.data
FROM t1
INNER JOIN t2 ON t1.data = t2.fk
UNION ALL
SELECT t1.data, NULL
FROM t1
这可以为您提供所需的结果集。