1

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

我正在构建一个关于 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

我想要这个结果的原因是我可以在其他软件中使用视图并只过滤 t2.data = NULL 的记录

有谁知道我该怎么做?我不想手动加入该软件,因为它的性能低效到最终用户无法承受的程度。

感谢您的帮助。

PS我想过用一个完全外部连接一个不匹配的top(1)选择的子选择替换右表,但我不知道如何正确地做到这一点:-/

4

1 回答 1

2

你的答案是这样的:使用 anINNER 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

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

于 2013-02-21T13:58:51.750 回答