Заставить MySQL возвращать дубликаты из предложения WHERE IN без использования JOIN / UNION? - PullRequest
7 голосов
/ 14 февраля 2010

Это может быть не очень разумно, но я бы хотел, чтобы MySQL вернул мне точные повторяющиеся строки, если в предложении WHERE IN есть повторяющиеся критерии. Возможно ли это?

Возьмите этот пример:

SELECT
   columns
FROM
   table
WHERE
   id IN( 1, 2, 3, 4, 5, 1, 2, 5, 5)

Мне бы хотелось, чтобы MySQL возвращал мне строки с идентификатором 5 три раза, идентификаторы 1 и 2 дважды и 3 и 4 один раз.

Поскольку длина аргументов IN и количество дубликатов (один, два, три раза и т. Д.) Будут произвольными, я не хочу полагаться на UNION или JOIN. Возможно ли что-то подобное в противном случае?

1 Ответ

3 голосов
/ 14 февраля 2010

Я не уверен, почему вы хотите запретить JOIN, поскольку он довольно важен для SQL. Это похоже на запрет вызовов функций на функциональном языке.

Хороший способ решить эту проблему - создать набор результатов, содержащий идентификаторы, которые вы хотите вернуть, и присоединиться к нему. Вот один из способов сделать это:

SELECT Table1.*
FROM Table1
JOIN (SELECT 1 AS id
      UNION ALL SELECT 2
      UNION ALL SELECT 3
      UNION ALL SELECT 4
      UNION ALL SELECT 5
      UNION ALL SELECT 1
      UNION ALL SELECT 2
      UNION ALL SELECT 5
      UNION ALL SELECT 5) AS T1
ON Table1.id = T1.id

Я не уверен, что вы рассматривали этот метод? У него нет ни одной проблемы, которой вы, кажется, боитесь.

Если вы запрещаете присоединения, вы не сможете этого сделать, если не используете хранимую процедуру, что, я бы сказал, хуже присоединения.

...