我有一个SQLLEFT 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子句将用null“填充”,因此查询不会返回该行。总之,我需要表A中所有具有表B和表B中的关联记录的记录。col3不为NULL,并且表B中所有不具有表B中的关联记录的记录。
预期输出(我需要的):
+------+------+------+
| b1 | b2 | b3 |
| c1 | c2 | c3 |
+------+------+------+
有什么办法可以找回这个吗?
谢谢你的帮助!
基于您的编辑:
select a.col1, a.col2, a.col3
from tablea a
left join tableb b
on a.col2 = b.col2
where b.col3 is not null
or b.col2 is null
小提琴:http://sqlfiddle.com/#!15/e98a5/12/0
我将问题解释为:
我需要表A中所有具有表B中关联记录的记录AND tableB. col3 IS NULL和表A中所有在表B中没有关联记录的记录。
这更具挑战性。我认为以下查询实现了逻辑:
SELECT *
FROM tableA a LEFT JOIN
tableB b
ON a.col2 = b.col2
WHERE (a.col2 = b.col2 and b.col3 is null) or
(b.col2 is null)
编辑:
根据您的编辑,您似乎想要:
我需要表A中的所有记录都有来自表B的关联记录,并且表B中没有关联记录。
SELECT *
FROM tableA a LEFT JOIN
tableB b
ON a.col2 = b.col2
WHERE (a.col2 = b.col2 and b.col3 is not null) or
(b.col2 is null)
问题内容: 我使用FULL OUTER JOIN联接了2个表,这花了6分钟来运行并给出输出。 我使用LEFT OUTER JOIN和RIGHT OUTER JOIN的UNION做了同样的事情。仅用了15秒 有人知道为什么会这样吗? 问题答案: 您可能在两个表中都有很多行,共有几行,并且所讨论的列上没有索引。
问题内容: 我正在尝试编写一个join语句来将以下三个数据集连接在一起。(这是使用MS SQL Server的) 我认为完全可以通过外部联接来做到这一点,但是我遇到了主要的跨产品问题。 问题答案: 试试看:
为什么我不能在SELECT部分执行NULL测试?有办法解决这个问题吗?
问题内容: 我有这些表, 和。我想执行左外部联接。 劳斯莱斯 推出 SUMing,JOINing和GROUPings之后的预期输出==> 我的代码: 但是上面代码的O / P是 我不知道我要去哪里错了-你能解释一下吗? 问题答案: 您没有做错任何事。这就是JOIN的行为 它是左边的行数X右边的行数,在您的情况下为3 x 2 = 6。 试试这个 SQLFiddle 我知道这不适用于SQL Serve
问题内容: 我有一个包含4列的表格:项目,年份,月份,金额。Amount的某些值是null,当发生这种情况时,我想用以前的非null的Amount值来填充这些值。当只有一个空值时,我可以使用LAG函数轻松地做到这一点,但是当连续有多个空值时,我不确定如何处理它。以下是该表的外观示例,其中添加了要在查询中添加的内容的列: 我有两个想法,我似乎无法投入工作来实现自己想要的东西。首先,我要使用LAG,但
无论B表中是否有匹配的记录,左外连接都应该从左表中获取所有数据,但如果左表的right_id列为空,则不能获取记录。 我在解释更多 我发现了这个, HQL支持两种形式的关联连接:隐式和显式。 上一节中显示的查询都使用显式形式,即在from子句中显式使用join关键字。这是推荐的表格。