Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择带有两个IN(列表)参数的查询_Mysql_Sql_Select - Fatal编程技术网

Mysql 选择带有两个IN(列表)参数的查询

Mysql 选择带有两个IN(列表)参数的查询,mysql,sql,select,Mysql,Sql,Select,使用下表,我如何编写一个mySql查询来提取匹配对的行 我需要获取匹配ID/rID对的行:[101002]、[141003]、[281001]、[401002] myTable ID rID rName ------------------ 1 1001 ThisName 10 1002 ThatName *** 10 1001 SomeName 11 1001 OtherName 14 1003 NewName *** 14 1001

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

我需要获取匹配ID/rID对的行:[101002]、[141003]、[281001]、[401002]

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)

但这也返回了对[101001]、[141001]和[281002]。

您可以在中对元组使用

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);

您可以在
中对元组使用

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似乎并没有对这一点进行非常好的优化well@Gordon林诺夫-很好!谢谢……我不知道你能做到。这个名字叫做
tuples
?嗯…@rolinger注意到MySQL似乎并没有对此进行非常好的优化well@Gordon林诺夫-很好!谢谢……我不知道你能做到。这个名字叫做
tuples
?呵呵。。。