Использовать предложение для повторяющихся данных — MYSQL

#mysql

#mysql

Вопрос:

У меня есть хэш-таблица:

 table: hash
hash_id hash
'1', 'xKsKoM'
'2', 'taahmD'
'3', '23PNiJa'
  

Когда вы выполняете запрос:

 select * 
from 
where hash in ('taahmD', 'taahmD')
  

Это приводит (одна строка):
1. taahmD

Но мне нужно вернуть (две строки, … n строк):
1. taahmD
2. taahmD

Возвращается только строка — необходимая для возврата двух (дубликатов).

Каково решение?

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

1. Учитывая ваши примерные данные, почему он должен возвращать 2 результата? Ваши where критерии эквивалентны where hash = 'taahmD'

2. Необходимо вернуть дубликат, но из-за значений внутри одного и того же in возвращает только одну строку. Это было бы в случае использования union all?

Ответ №1:

Но мне нужно вернуть (две строки, … n строк)

Вы могли бы использовать объединение, но для n строк это было бы громоздко, другой способ — объединить простые строки, генерирующие иерархические запросы n . Вот пример для 5 строк (версия Oracle):

 select hash
  from hash cross join (select null from dual connect by level <= 5)
  where hash = 'taahmD'
  

Ответ №2:

Например, вы можете присоединиться к некоторой таблице с двумя значениями. (Отредактировано, добавлено ВНУТРЕННЕЕ слово)

 select t.* 
from <your table> t
INNER JOIN (select 1 as a from dual 
      union all
      select 2 as a from dual) d on 1=1
where hash in ('taahmD')
  

Или запрашивайте таблицу дважды

 select t.* 
from <your table> t
where hash in ('taahmD')
union all 
select t.* 
from <your table> t
where hash in ('taahmD')
  

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

1. Спасибо… Я хотел бы использовать первую форму, повторяющуюся разное время для разных хэшей? итак, я попытался, но не сработало: ` выберите h. * из хэша h JOIN (выберите 1 из dual в объединение all выберите 2 из dual) d на 1 = 1 и хешируйте в (‘taahmD’) JOIN (выберите 1 из dual в b) и на 1 = 1и хэш в (’23PNiJa’)`

2. Спасибо за исправление. Насколько я знаю, в MySQL вы должны написать INNER JOIN вместо JOIN . Я исправляю первый запрос.

3. Почему вы пишете «JOIN (выберите 1 из dual в b) и на 1 = 1 и хэш в (’23PNiJa’)»? Это не имеет смысла

4. Потому что мне нужно повторить несколько хэшей, а не один.