Não, não há uma solução simples, a menos que os valores já estejam nas respectivas tabelas (normais ou temporárias). Se eles são,
A IN(X, Y, ..., W) OR B IN(X, Y, ..., W)
é fácil de reescrever. É equivalente a:
EXISTS ( SELECT *
FROM List1 JOIN List2 ON List1.item = List2.item )
Se Ae Bnão forem fornecidos valores/parâmetros, mas colunas/expressões das tabelas envolvidas na consulta, podemos usar uma abordagem mista, tendo apenas os X, Y, ..., Wvalores em uma tabela (temp):
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))
Se os valores ainda não estiverem nas tabelas, uma maneira de escrever isso seria usando a VALUEScláusula, mas isso não foi implementado no mySQL:
EXISTS ( SELECT *
FROM (VALUES (A), (B)) AS List1 (item)
JOIN
(VALUES (X), (Y), ... (W)) AS List2 (item)
ON List1.item = List2.item )
No MySQL, você terá que reescrever o VALUEScom subconsultas bastante longas, usandoUNION
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 )
Não, não há uma solução simples, a menos que os valores já estejam nas respectivas tabelas (normais ou temporárias). Se eles são,
é fácil de reescrever. É equivalente a:
Se
A
eB
não forem fornecidos valores/parâmetros, mas colunas/expressões das tabelas envolvidas na consulta, podemos usar uma abordagem mista, tendo apenas osX, Y, ..., W
valores em uma tabela (temp):Se os valores ainda não estiverem nas tabelas, uma maneira de escrever isso seria usando a
VALUES
cláusula, mas isso não foi implementado no mySQL:No MySQL, você terá que reescrever o
VALUES
com subconsultas bastante longas, usandoUNION