Выберите строку для каждого ключа в выражении IN, даже если они равны
Пример для моего вопроса:
У меня есть массив идентификаторов
[ 6230, 206, 4259, 24761, 26736, 219, 281, 281, 516, 495, 10371 ]
И я хочу настроить запрос SELECT для моей базы данных.
SELECT * FROM `database`.`table` WHERE `id` IN (6230, 206, 4259, 24761, 26736, 219, 281, 281, 516, 495, 10371);
Как вы можете видеть, у меня есть 2 идентификатора, которые равны, поэтому в результате этого запроса у меня будет только 10 строк.
Но я хочу получить одну строку для каждого идентификатора в массиве. Как я уже догадался, это невозможно сделать с помощью оператора IN().
Могу ли я получить какие-либо предположения о том, как решить эту проблему.
Просто чтобы заметить: я не могу выполнить разные запросы для каждого элемента массива.
1 ответ
Решение
Создайте набор с одной записью для каждого идентификатора и присоединитесь к нему:
select t.* from database.table as t inner join (
select 6230 as id union all
select 206 union all
select 4259 union all
select 24761 union all
select 26736 union all
select 219 union all
select 281 union all
select 281 union all
select 516 union all
select 495 union all
select 10371
) as x on x.id = t.id