【问题标题】:Select query with two IN (list) parameters选择带有两个 IN(列表)参数的查询
【发布时间】:2021-03-11 16:25:01
【问题描述】:

如何使用下表编写一个 mySql 查询来提取匹配对的行?

我需要获取匹配的 ID/rID 对的行:[10,1002]、[14,1003]、[28,1001]、[40,1002]

myTable
ID    rID   rName
------------------
1     1001  ThisName
10    1002  ThatName ***
10    1001  SomeName
11    1001  OtherName
14    1003  NewName  ***
14    1001  CrazyName
21    1003  OldName
28    1001  GoodName ***
28    1002  SimpleName
31    1003  BadName
40    1002  GreatName  ***
50    1004  TerribleName
60    1001  BlahName

带 *** 的行是我要提取的行。我正在尝试以下查询

SELECT * 
FROM myTable 
WHERE ID IN (10,14,28,40) AND rID IN (1001,1002,1003)

但这也会返回对 [10,1001]、[14,1001] 和 [28,1002]。

【问题讨论】:

    标签: mysql sql select


    【解决方案1】:

    您可以将in 与元组一起使用:

    select t.*
    from mytable t
    where (id, rid) in ( (10, 1001), (14, 1003), (28, 1001), (40, 1002) );
    

    您也可以使用显式比较来表达这一点:

    select t.*
    from mytable t
    where (id = 10 and rid = 1001) or
          (id = 14 and rid = 1003) or
          (id = 28 and rid = 1001) or
          (id = 40 and rid = 1002);
    

    【讨论】:

    • @rolinger 注意 MySQL 似乎没有很好地优化这一点
    • @Gordon Linoff - 很好!谢谢....我不知道你能做到这一点。这个名字叫tuples吗?嗯……
    猜你喜欢
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 2019-10-20
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多