#mysql #sql
Вопрос:
Я пытаюсь сделать запрос , в котором я выбираю значение из массива, используя IN
, но внутри этого массива, если у меня дважды одно и то же значение, я бы хотел, чтобы запрос возвращал результат дважды.
Чтобы внести ясность, приведу пример:
select id_exo, count(id_exo) FROM BLOC WHERE id_seance IN (10,10) group by id_exo
Итак , внутри IN
я поместил в 2 раза большее значение 10.
Вот результат:
id_exo | количество(id_exo) |
---|---|
60 | 1 |
82 | 1 |
Но в подсчете я хотел бы иметь цифру 2, так как я вложил в нее дважды 10 IN
.
Как я могу этого достичь?
Комментарии:
1. Вам нужно будет использовать соединение вместо
IN
.2. хорошо, спасибо за ответ, но как передать массив с помощью объединения ?
3. Я не ответил, я опубликовал комментарий, который указывал в направлении решения. Я не использую MySQL, поэтому не знаю всех его входов и выходов. Хотя технически ваш заданный вопрос не связан с массивами. У вас есть
IN
со списком литеральных значений, в терминах SQL, который не является массивом.
Ответ №1:
SELECT id_exo, COUNT(id_exo)
FROM bloc
JOIN (SELECT 10 id_seance
UNION ALL
SELECT 10) val USING (id_seance)
GROUP BY id_exo
Ответ №2:
До MySQL 8.0 вы можете присоединиться с помощью дополнительного выбора:
select * from BLOC as b
inner join (
select 1 as 'id', 10 as 'value'
union
select 2,10
union
select 3,10) as myValues on myValues.value = b.id_seance
Вам нужен столбец id, так как инструкция UNION удаляет повторяющиеся строки
Если вам посчастливилось иметь MySQL 8.0, посмотрите на инструкцию VALUES https://dev.mysql.com/doc/refman/8.0/en/values.html
Здесь вы должны вместо этого иметь возможность присоединиться к чему-то вроде
VALUES ROW(10), ROW(10), ROW(10)