【问题标题】:SQL query <> populates even blank rowsSQL 查询 <> 甚至填充空白行
【发布时间】:2018-01-08 09:26:13
【问题描述】:

我有 2 个包含 4,00,000 + 条记录的表: 表 A(列:编号和分类)和表 B(列:编号和分类)。我必须从两个不相等的表中提取代码。

SELECT DISTINCT
  a.number,
  a.classification,
  b.classification
FROM TableA a
LEFT OUTER JOIN TableB b
  ON b.number = a.number
  AND a.classification != b.classification;

此查询填充所有不相等的记录,包括空白行。我想要一个没有空白行的查询。

所以我在查询中添加了另一行:

SELECT DISTINCT
  a.number,
  a.classification,
  b.classification
FROM TableA a
LEFT OUTER JOIN TableB b
  ON b.number = a.number
  AND a.classification != b.classification
  AND a.classification IS NOT NULL
  AND b.classification IS NOT NULL;

但是上面的查询运行了 35 分钟并且没有生成任何记录。有人可以帮我找一个替代方案吗?

【问题讨论】:

  • mysql != sql server,未涉及的产品请勿标注。
  • 您可以添加一些示例数据和预期输出吗?确保在它们可以存在的地方包含一些 NULL 值。
  • 嗨。你不清楚。例如“从两个表中提取不相等的代码”。是无法理解的。使用足够的单词、短语和句子来清楚地指代事物及其部分。请阅读minimal reproducible example 并采取行动。了解outer join on 返回的内容:inner join on 返回的内容以及由空值扩展的不匹配的左表行。另请阅读比较中的空值:对于 != 为真,两个操作数都不能为空,因此添加 and is not null 什么都不做。之后还应用where

标签: mysql sql sql-server toad


【解决方案1】:

你快到了:

select distinct a.number, a.classification, b.classification 
from      TableA a 
left join TableB b 
       on b.number = a.number
      and a.classification = b.classification
where b.number is null;

首先查找相等的,然后选择未找到的。

或者,因为您显然想要 b.classification 值:

select distinct a.number, a.classification, b.classification 
from      TableA a 
left join TableB b 
       on b.number = a.number
where a.classification != b.classification;

【讨论】:

  • 嗨亲爱的,感谢您的回复。我很抱歉造成混乱。但我想这个问题还不清楚。 b.number 不会为空。比较在列 a.classification != b.classification 之间。我不希望 a.classification 和 b.classification 都是空白的行。
  • 你被where b.number is null甩了。这并不意味着表中的值为空,它意味着一条记录无法连接到TableA,因此numberclassification 不相等。您可能需要第二个查询,如果 TableA 和 TableB classification 都是 null,则记录将被忽略。
【解决方案2】:

请试试这个 -> a.classification ''

select distinct a.number, a.classification, b.classification 
from TableA a left outer join 
TableB b on b.number = a.number
and a.classification != b.classification
AND a.classification <> '' AND a.classification IS NOT NULL
AND b.classification <> '' AND b.classification IS NOT NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2021-01-04
    相关资源
    最近更新 更多