EXISTS ( SELECT *
FROM List1 JOIN List2 ON List1.item = List2.item )
如果A和B不是提供的值/参数,而是查询中涉及的表中的列/表达式,我们可以使用混合方法,只X, Y, ..., W提供(临时)表中的值:
A IN (SELECT item FROM List2)
OR
B IN (SELECT item FROM List2)
-- alternative 1
EXISTS (SELECT * FROM List2 WHERE List2.item = A)
OR
EXISTS (SELECT * FROM List2 WHERE List2.item = B)
-- alternative 2
EXISTS (SELECT * FROM List2 WHERE List2.item IN (A,B))
如果值不在表中,那么写这个的方法是使用VALUES子句,但这还没有在 mySQL 中实现:
EXISTS ( SELECT *
FROM (VALUES (A), (B)) AS List1 (item)
JOIN
(VALUES (X), (Y), ... (W)) AS List2 (item)
ON List1.item = List2.item )
在 MySQL 中,您必须VALUES使用相当长的子查询重写UNION
EXISTS ( SELECT *
FROM (SELECT A AS item UNION ALL
SELECT B
) AS List1
JOIN
(SELECT X AS item UNION ALL
SELECT Y UNION ALL
...
SELECT W
) AS List2
ON List1.item = List2.item )
不,没有简单的解决方案,除非值已经在各自的(正常或临时)表中。如果它们是,
很容易重写。它相当于:
如果
A
和B
不是提供的值/参数,而是查询中涉及的表中的列/表达式,我们可以使用混合方法,只X, Y, ..., W
提供(临时)表中的值:如果值不在表中,那么写这个的方法是使用
VALUES
子句,但这还没有在 mySQL 中实现:在 MySQL 中,您必须
VALUES
使用相当长的子查询重写UNION