我正在运行以下查询,其中两个表都包含一个整数列:

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/

10-14 14:54
查看更多