【发布时间】:2014-09-08 23:07:39
【问题描述】:
我有一个具有一对多关系的 SQL LEFT OUTER JOIN。这是一个例子
表 A
+------+------+------+
| Col1 | Col2 | Col3 |
+------+------+------+
| a1 | a2 | a3 |
| b1 | b2 | b3 |
| c1 | c2 | c3 |
+------+------+------+
表 B
+------+------+------+
| Col1 | Col2 | Col3 |
+------+------+------+
| x1 | a2 | NULL |
| y1 | b2 | y3 |
+------+------+------+
我在 Col2 上加入表格,所以:
SELECT * FROM tableA
LEFT OUTER JOIN tableB ON tableA.col2 = tableB.col2
WHERE tableB.col3 IS NOT NULL
此查询按预期返回 tableA 的第二行。我的问题是我还需要 tableA 的第 3 行,因为它在 tableB 上没有相关记录。由于 JOIN 子句在未找到关联时用空值“填充”,因此查询不会返回该行。总而言之,我需要表 A 中的所有记录,这些记录具有表 B 中的关联记录,并且 tableB.col3 不为空,并且表 B 中的所有记录在表 B 上没有关联记录。
预期输出(我需要的):
+------+------+------+
| b1 | b2 | b3 |
| c1 | c2 | c3 |
+------+------+------+
关于如何检索此内容的任何想法?
感谢您的帮助!
【问题讨论】:
-
您的意思是在较长段落的末尾“以及表 A 中 [do] 在表 B 上没有关联记录的所有记录”吗?
-
是的,我就是这个意思。编辑了帖子。
标签: sql postgresql join