你能告诉我这两者有什么区别吗?
我曾尝试使用两者来比较两个表,但结果有点不同:

  SELECT a.CustID FROM tbl1 AS a
  WHERE EXISTS (SELECT b.CustID FROM tbl2 b WHERE (a.CustID=b.CustID))

此查询结果 178 行。但是,下面的查询结果为 162 行。
  SELECT a.CustID FROM tbl1 AS a
  INTERSECT
  SELECT b.CustID FROM tbl2 AS b

最佳答案

如果您在 tbl1 中有重复的 CustId ,以下查询将产生多行

  SELECT a.CustID FROM tbl1 AS a
  WHERE EXISTS (SELECT b.CustID FROM tbl2 b WHERE (a.CustID=b.CustID))

如果您使用 INTERSECT,将消除重复项
  SELECT a.CustID FROM tbl1 AS a
  INTERSECT
  SELECT b.CustID FROM tbl2 AS b

例如。
CREATE TABLE tbl1 (CustId int, CustName varchar(100))
GO
INSERT INTO tbl1 VALUES(1 ,'N1')
GO
INSERT INTO tbl1 VALUES(2 ,'N2')
GO
INSERT INTO tbl1 VALUES(1 ,'N3')
GO
CREATE TABLE tbl2 (CustId int, CustName varchar(100))
GO
INSERT INTO tbl2 VALUES (1 ,'N1')
GO

对于上表,如果您运行
 SELECT a.CustID FROM tbl1 AS a
  WHERE EXISTS (SELECT b.CustID FROM tbl2 b WHERE (a.CustID=b.CustID))

您将获得 2 条记录。

如果你跑
   SELECT a.CustID FROM tbl1 AS a
  INTERSECT
  SELECT b.CustID FROM tbl2 AS b

您将获得 1 条记录。

注意:如果将 DISTINCT 与查询 1 一起使用,则两者都会产生相同的输出。
  SELECT DISTINCT a.CustID FROM tbl1 AS a
  WHERE EXISTS (SELECT b.CustID FROM tbl2 b WHERE (a.CustID=b.CustID))

关于sql-server - WHERE EXISTS 和 INTERSECT 之间的 T-SQL 区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48483429/

10-10 14:25