Как мне выбрать записи в MySQL с несколькими столбцами, соответствующими карте значений?

#mysql

#mysql

Вопрос:

У меня есть следующая таблица из 3 столбцов:


---- --------- ------------
| ID | First | Last |
---- --------- ------------
| 1 | Maurice | Richard |
| 2 | Yvan | Cournoyer |
| 3 | Carey | Price |
| 4 | Guy | Lafleur |
| 5 | Steve | Shutt |
---- --------- ------------

Если я хочу искать всех, (Maurice,Guy) я могу это сделать select * from table where first in (Maurice,Guy) .

Если я хочу просто найти Maurice Richard , я могу сделать select * from table where first = "Maurice" and last = "Richard" .

Как мне создать карту, кратный массив?


[
[Maurice, Richard]
[Guy,Lafleur]
[Yvan,Cournoyer]
]

Если у меня произвольное количество записей, я не могу построить длинный комплекс where (first = "Maurice" and last = "Richard") or (first = "Guy" and last = "Lafleur") or .... .

Как мне сделать моральный эквивалент where (first, last) in ((Guy,Lafleur),(Maurice,Richard)) ?

Ответ №1:

Вы можете сделать это точно так, как вы это описываете:

 SELECT *
FROM mytable
WHERE (first, last) IN (('Guy','Lafleur'),('Maurice','Richard'))
 

Демонстрация здесь

Комментарии:

1. Э-э … потому что я думал, что это неверно. Я только что составил этот синтаксис на основе обычного where somecol in (opt1, opt2, opt3) , чтобы описать то, что я хотел. Я всегда думал, что вы не сможете этого сделать! Действительно? Я могу? Так забавно!

2. Что ж, это действительно работает. Спасибо за скрипку! Снимаю шляпу! (по-видимому, это слишком быстро, это еще не позволяет мне принять ответ. Извините за это. сделаю это через 3 минуты, когда это позволит мне)