Heim >Datenbank >MySQL-Tutorial >如何判断多个字段组成的关键字在另外一张表中是否存在

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

WBOY
WBOYOriginal
2016-06-07 16:10:051937Durchsuche

如何判断多个字段组成的关键字在另外一张表中是否存在 老帅(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中不会有空值,任何这样的值都会让原始查询不会返回结果!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:数据库:JDBC编程Nächster Artikel:Elasticsearch2014年10月简报