#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. Потому что мне нужно повторить несколько хэшей, а не один.