В SQL есть что-то вроде "IN", но для нескольких условий "И"?

В SQL есть что-то вроде "IN", но для нескольких условий "И" вместо нескольких условий "ИЛИ"?

РЕДАКТИРОВАТЬ: Теперь я вижу, что это был глупый вопрос. На самом деле я имел в виду следующее: если у меня есть такой стол:

_id time_entry_id tag_id

1 1 1

2 1 2

3 1 3

4 2 2

5 2 3

Есть ли команда SQL, которая будет возвращать только time_entry_ids, где tag_id = 1 И 2 ​​И 3.

1 ответ

То, что вы описываете, называется реляционным делением. Для этого в SQL нет оператора.

Есть два общих решения.

Первое решение - сделать самостоятельное объединение для каждого из значений, которые вы ищете. Таким образом, вы можете написать выражение в предложении WHERE, которое ссылается на один и тот же столбец и сравнивает три разных значения.

SELECT t1.time_entry_id
FROM table_like_this t1
JOIN table_like_this t2 USING (time_entry_id)
JOIN table_like_this t3 USING (time_entry_id)
WHERE t1.tag_id = 1 AND t2.tag_id = 2 AND t3.tag_id = 3;

Второе решение состоит в том, чтобы найти все строки с любым из значений, которые вы ищете, и если вы найдете группу таких строк, которая включает в себя все три, то группа пройдет поиск по реляционному разделению.

SELECT time_entry_id
FROM table_like_this
WHERE tag_id IN (1,2,3)
GROUP BY time_entry_id
HAVING COUNT(DISTINCT tag_id) = 3;
Другие вопросы по тегам