Есть ли что-то в MySQL как В, но который использует И вместо ИЛИ?

Мне нужен SQL-оператор для получения записей, где это ключ (или любой столбец) находится в объединенной таблице, например:

documentId termId
4             1
4             2
3             3
5             1

Это:

SELECT documentId 
  FROM table 
 WHERE termId IN (1,2,3)

... получит любого documentid оцените где termid значение равняется 1 или 2 или 3.

Есть ли что-то вроде этого кроме возврата documentid значения, где termid значения равняются 1 и 2 и 3? Как В, но с И.

5
задан OMG Ponies 18 May 2010 в 19:37
поделиться

1 ответ

Прямых функций нет, но есть два варианта:

Использование GROUP BY / HAVING


  SELECT t.documentid
    FROM TABLE t
   WHERE t.termid IN (1,2,3)
GROUP BY t.documentid
  HAVING COUNT(DISINCT t.termid) = 3

Предостережение заключается в том, что вы должны использовать HAVING COUNT (DISTINCT ], потому что дубликаты termid, равные 2 для одного и того же документа, будут ложным срабатыванием. И COUNT должно равняться количеству значений termid в предложении IN.

Использование JOINs


SELECT t.documentid
  FROM TABLE t
  JOIN TABLE x ON x.termid = t.termid
              AND x.termid = 1
  JOIN TABLE y ON y.termid = t.termid
              AND y.termid = 2
  JOIN TABLE z ON z.termid = t.termid
              AND z.termid = 3

Но это может быть проблемой для обработки критерии, которые сильно меняются.

7
ответ дан 14 December 2019 в 08:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: