[英]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.