我正在运行以下查询,其中两个表都包含一个整数列:
INSERT INTO otherNumbers(number)
VALUES(
CASE
WHEN (2202 in (select * from numbers)) THEN 2
WHEN (2201 in (select * from numbers)) THEN 1
ELSE 0
END
);
我正在为MySQL服务器实例准备以上SQL查询,作为该查询的一部分,我想检查集合中是否包含某个值。我使用以下语法实现了这一点:
2202 IN (SELECT * FROM numbers)
但是,我也遇到一组值的任何匹配都足够的情况。在伪SQL中,我想做这样的事情:
(2202, 2203, 2204) ANY IN (SELECT * FROM numbers)
显然不起作用。由于数据的性质,我想避免以下形式的逻辑爆炸:
2202 IN (SELECT * FROM numbers) OR 2203 IN (SELECT * FROM numbers) OR 2204 IN (SELECT * FROM numbers)
由于有关我的问题的术语非常笼统(关键字为
IN
),即使我相信会有任何问题,也找不到描述我问题的任何问题。实现我期望的结果的最佳实践方法是什么?我可以考虑在两个集合上使用内部联接并查看返回的行是否大于0的一种方法,但是我无法想到一种表达这种方式的方法。
最佳答案
In子句可以重构为内部联接
select *
from (
select 2202 my_num
UNION
select 2203
UNION
select 2204
) t1
INNER JOIN (
select my_col
from my_table
) t2 on t1.my_num = t2.my_col
关于mysql - 当我有一组值来检查哪个匹配就足够了时,如何使用IN SQL运算符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58996036/