首页 > 解决方案 > 如何针对另一个表的列中的预设数据查找列中不存在的数据

问题描述

我需要一个 SQL 代码来比较一个表中不存在的数据与另一个包含一组唯一预期数据的表。

我尝试过使用 EXIST 和 NOT EXIST 运算符。

EXIST 运算符将显示第二个表中的所有数据。NOT EXIST 运算符不会显示任何结果。

代码看起来像

SELECT * 
FROM st 
WHERE EXISTS 
(SELECT data FROM udt WHERE st.data <> udt.data) 

这是我的唯一数据表 (udt) 示例:

+------+
| data |
+------+
|   1  |
|   2  |
|   3  |
|   4  |
+------+

这是我的第二个表(st)示例:

+------+------+
| name | data |
+------+------+
|  AZ  |   1  |
|  AZ  |   3  |
|  BY  |   2  |
|  BY  |   4  |
|  CX  |   1  |
|  CX  |   4  |
|  DW  |   2  |
|  DW  |   3  |
+------+------+

我想要一个代码来显示第二个表中不存在的名称和代码。那是:

+------+------+
| name | data |
+------+------+
|  AZ  |  2   |
|  AZ  |  4   |
+------+------+ 

等等

一方面,这可能吗?如果可能,我可以应用什么代码语法?我明白为什么 EXIST 和 NOT EXIST 不会显示数据,但是有什么方法可以获得所需的结果吗?

标签: mysqlsqlms-access

解决方案


不确定这是否是最好的方法,现在还早,还没有多少咖啡:o)

我已经更改了您的字段名称,但使它们尽可能接近您的名称。

select q1.[name_],q1.data1
from
(select distinct [name_],data1 from 
st,udt) as q1
left join
st as d1
on q1.[name_]=d1.[name_] and
q1.data1=d1.[data_]
where d1.[name_] is null

给你结果

名称数据1

AZ 2

AZ 4

1

由 3

CX 2

CX 3

dw 1

dw 4


推荐阅读