В 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;