繁体   English   中英

在 SQL 查询中执行 MINUS 时忽略列

[英]Ignore a column while doing MINUS in SQL query

我已经写了查询:

Select distinct a,b from t1 minus Select distinct a,b from t2.

这里 t1 和 t2 是两个表。 我想要在 t1 但不在 t2 中出现的 a 和 b 的不同值。 所以我使用减号运算符。 我想要 a 和 b 的值,但我知道在某些情况下, t1 和 t2 中的 b 值可能不同。 这将导致 t1 和 t2 中都存在 a 和 b 的值,因为如果 b 的值在两个表中都不匹配,则不会发生减号。 我怎样才能成功地做到这一点?

如何获取表 t1 中存在但表 t2 中不存在的 a 和 b 的值,即使在某些情况下 b 的值可能在两个表中都不匹配?

    table1:                              table2:
column1  column2                    column1   column2
  1      a                             1         c
  2      b                             3         d

在这种情况下,我只想要值 (2,b)。 我不希望 (1,a) 因为 1 也出现在 table2 中。

not exists开始:

select distinct. . .
from t1
where not exists (select 1 from t2 where t2.a = t1.a and t2.b = t1.b);

根据您的描述,您可能只想在a上进行比较:

select distinct a, b
from t1
where not exists (select 1 from t2 where t2.a = t1.a);

对于不包含在 t2 中的数据,您可以使用 go 来表示 NOT EXISTS 或 LEFT OUTER JOIN。 这是解决方案。

使用不存在

SELECT DISTINCT A,B FROM T1 WHERE NOT EXISTS (SELECT 1 FROM T2 WHERE T2.A = T1.A AND T2.B = T1.B);

使用左连接

SELECT DISTINCT a,b,c FROM T1 LEFT JOIN T2  ON T1.a = T2.a and T1.b = T2.b WHERE T2.a IS NULL AND T2.b IS NULL

希望能帮助到你。

另一种选择是在 WHERE 条件中使用子查询,如下所示 -

SELECT A.* 
FROM table1 A
WHERE A.column1 NOT IN
(SELECT DISTINCT column1 FROM table2)

您还可以使用 LEFT JOIN 如下,它将为您提供与以下相同的 output -

SELECT A.* 
FROM table1 A
LEFT JOIN table2 B ON A.column1 = B.column1
WHERE B.column1 IS NULL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM