为View生成未连接的额外行

时间:2013-02-21 13:55:41

标签: sql sql-server view

对不起,我真的不知道用什么关键字来寻找我的问题的帮助。

我正在构建一个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)选项,但我无法弄清楚如何正确地做到这一点: - /

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

这可以为您提供所需的结果集。