Мне нужен 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? Как В, но с И.
Прямых функций нет, но есть два варианта:
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.
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
Но это может быть проблемой для обработки критерии, которые сильно меняются.