MySQL силы для возврата дубликатов, от ГДЕ В пункте, не используя СОЕДИНЕНИЕ/ОБЪЕДИНЕНИЕ?

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

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

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

I'ld как MySQL для возврата меня строки с идентификатором 5 три раза, идентификатор 1 и 2 дважды, и 3 и 4 однажды.

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

7
задан Decent Dabbler 13 February 2010 в 21:39
поделиться

1 ответ

Я не совсем понимаю, почему вы хотите запретить 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

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

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

3
ответ дан 7 December 2019 в 16:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: