查找存在于一个表中而不是另一个表中的行

问题描述

CREATE TABLE final(
  FileID int,rate varchar(50),groupID varchar(50),destination varchar(50),Rate int,bDate date,eDate date,billID varchar(50) NULL
 );
 
 CREATE TABLE temp(
  FileID int,billID varchar(50) NULL
 );
 
 
 INSERT final VALUES (1,'123','1033','987',2,'2020-01-01','2020-12-31',NULL);
 INSERT final VALUES (1,'234','1052','985','999','988',1,'2021-01-01','2021-12-31','0/1/1');
 INSERT final VALUES (2,'222','989','2022-01-01','2022-12-31',NULL);
 
 INSERT temp VALUES (1,'2020-06-06','0/1/1');
 INSERT temp VALUES (1,'0/1/1');
 INSERT temp VALUES (2,'0/1/1');

假设我有这两个表,我想做 2 个查询

  1. 根据 FileID 查找在最终表中但不在临时表中的行 假设我们只查看 FileID = 1
文件ID 组ID 目的地 日期 电子日期 账单ID
1 123 1033 987 2 2020-01-01 2020-12-31 NULL
1 234 1052 985 2 2020-01-01 2020-12-31 NULL
  1. 根据它们的 FileID 查找临时表中但不在最终表中的所有行。假设我们只查看 FileID = 1
文件ID 组ID 目的地 日期 电子日期 账单ID
1 123 1033 987 2 2020-06-06 2020-12-31 0/1/1

是否有一个有效的查询可以做到这一点?

解决方法

左连接,然后为另一个表选择空行。

这是一个例子。我输入了 [etc] 而不是输入所有字段名称。

SELECT final.fileId,final.rate [etc]
FROM
( 
SELECT final.fileId,final.rate [etc] temp.FileId
FROM final LEFT JOIN temp
ON final.FileId = temp.FileId,final.rate = temp.rate [etc] 
)
WHERE
temp.FileId IS NULL