#mysql #sql #select
Вопрос:
Используя следующую таблицу, как я могу написать один запрос 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].
Ответ №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);
Комментарии:
1. @rolinger обратите внимание, что MySQL, похоже, не очень хорошо оптимизирует это
2. @Гордон Линофф — здорово! Спасибо…. Я не знал, что ты можешь это сделать. Это имя все же называется
tuples
? Хм…