如何判断多个字段组成的关键字在另外一张表中是否存在

简介: 如何判断多个字段组成的关键字在另外一张表中是否存在老帅(20141107)1.首先判断一个关键字在另外一张表中是否存在很容易!SELECT * FROM a WHERE a.ID IN (SELECT b.ID FROM b)2.如果判断的关键字有多个字段构成怎么办呢?你不能在IN中使用多个字段。

如何判断多个字段组成的关键字在另外一张表中是否存在

老帅(20141107)

1.首先判断一个关键字在另外一张表中是否存在很容易!

SELECT * FROM a 

WHERE a.ID 

IN

 (

SELECT b.ID 

FROM b

)


2.如果判断的关键字有多个字段构成怎么办呢?

你不能在IN中使用多个字段。如下查询:

SELECT * FROM a

WHERE (a.ID1, a.ID2) 

IN

(

SELECT b.ID1, b.ID2

FROM b

)

这不会正常工作,违反了SQLSERVER标准。


3.要解决这一问题,可以用EXISTS来代替IN!

SELECT * FROM a

WHERE EXISTS

(

SELECT NULL

FROM b

WHERE a.ID1 = b.ID1

AND a.ID2 = b.ID2

)


4.值得注意的是,这仅适用于IN,而非NOT IN!

NOT IN与NOT EXISTS在处理空值的方式上略有不同。

SELECT *

FROM a

WHERE (a.ID1, a.ID2) NOT IN

(

SELECT b.ID1, b.ID2

FROM b

)

这不会正常工作,违反了SQLSERVER标准。要模仿NOT IN的查询如下:

我们必须使用以下查询:

SELECT *

FROM a

WHERE NOT EXISTS

(

SELECT NULL

FROM b

WHERE a.ID1 = b.ID1

AND a.ID2 = b.ID2

)

AND NOT EXISTS

(

SELECT NULL

FROM b

WHERE b.ID1 IS NULL 

OR b.ID2 IS NULL

)

第二个谓词确保b在ID1和ID2中不会有空值,任何这样的值都会让原始查询不会返回结果!

相关文章
|
9月前
|
存储 关系型数据库 索引
10. 在一个非主键字段上创建了索引, 想要根据该字段查询到数据, 需要查询几次 ?
在非主键字段上创建索引,查询数据通常需两次。对于MyISAM,先通过索引找到数据行指针,再获取数据;而InnoDB则先找主键ID,再从主键索引中查找数据。
57 0
|
9月前
|
Python
定义字段
定义字段。
37 1
|
9月前
|
SQL
Sql语法:字段不为空
Sql语法:字段不为空
|
SQL
一条集多表查询、字段与字段拼接、合并每张表共同字段、新增列并赋值的SQL
一条集多表查询、字段与字段拼接、合并每张表共同字段、新增列并赋值的SQL
84 0
|
JSON JavaScript 数据格式
根据多种条件过滤对象的JSON数组
根据多种条件过滤对象的JSON数组
143 0
|
存储 关系型数据库 MySQL
mysql字符串等值查询中条件字段值末尾有空格也能查到数据问题
mysql字符串等值查询中条件字段值末尾有空格也能查到数据问题
277 0
|
SQL 算法 测试技术
Guid算法与标识列(自动增长字段)在表中的应用
Guid算法与标识列(自动增长字段)在表中的应用
201 0
Guid算法与标识列(自动增长字段)在表中的应用
合并查询结果与为表和字段取别名
合并查询结果与为表和字段取别名
187 0
合并查询结果与为表和字段取别名