Подтвердить что ты не робот

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

Я бы хотел подумать, что есть более "сексуальное" решение, видя, что у меня может быть целых сотен пар, и, возможно, это может вызвать у меня тошноту. Спасибо!!!

4b9b3361

Ответ 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
)