当前位置: 首页 > 知识库问答 >
问题:

SQL离开了外部联接,但检测哪一行被空值“填充”

王伯寅
2023-03-14

我有一个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   |
+------+------+------+

有什么办法可以找回这个吗?

谢谢你的帮助!

共有2个答案

宗沛
2023-03-14

基于您的编辑:

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

轩辕鸿
2023-03-14

我将问题解释为:

我需要表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关键字。这是推荐的表格。