MySQL IN() для двух значений/массива?
У меня возникли проблемы с поиском лучшего способа поиска MySQL для пары значений в таблице. Я имею пары значений в массиве и хотел бы дублировать функцию IN(), но для более чем 1 значения.
Например, предназначенный; У меня есть следующие 3 пары:
foo,1
boo,2
goo,3
Текущее решение ставит меня на:
SELECT * FROM [table] WHERE
(column1 = 'foo' AND column2 = 1) OR
(column1 = 'boo' AND column2 = 2) OR
(column1 = 'goo' AND column2 = 3);
Я бы хотел подумать, что есть более "сексуальное" решение, видя, что у меня может быть целых сотен пар, и, возможно, это может вызвать у меня тошноту. Спасибо!!!
Ответы
Ответ 1
SELECT *
FROM foo
WHERE (column1, column2) IN (('foo', 1), ('bar', 2))
Этот синтаксис может сбивать с толку, и его можно более легко заменить:
SELECT *
FROM foo
WHERE ROW(column1, column2) IN (ROW('foo', 1), ROW('bar', 2))
Я привык к первому, хотя:)
Ответ 2
Если вы можете легко и быстро получить свои значения в таблице temp (вам нужны только два столбца), вы можете просто войти в свой путь туда. Если нет, вам придется использовать версию @Quassnoi.
Ответ 3
Отличные ответы от @Quassnoi и @KM!!!
Кроме того, вы можете получить дубликаты пар и выбрать их для последующей обработки:
SELECT *
FROM `foo`
WHERE (`id_obj` , `Foo_obj`)
IN (
SELECT `id_obj` , `Foo_obj`
FROM `foo`
GROUP BY `id_obj` , `Foo_obj`
HAVING count(*) > 1
)