Выберите В массиве с повторяющимся значением

#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)