我有两张一对多的桌子。
判断表
id | 状态 |
---|---|
1 | 1 |
2 | 2 |
类别表
id | judgement_id | category_id |
---|---|---|
1 | 1 | 1 |
2 | 1 | 2 |
3 | 1 | 3 |
4 | 2 | 1 |
现在,如果我的过滤器是 WHERE category_id = 1。因为我的过滤应该是绝对的,所以我只会得到判断_id = 2。
我试过了
SELECT * FROM judgement
INNER JOIN category ON category.judgement_id = judgement.id
WHERE category.category_id IN (1)
GROUP BY judgement.id
但我也得到了 Judgement_id = 1。
谢谢
答案 0 :(得分:1)
CREATE TABLE category
SELECT 1 id, 1 judgement_id, 1 category_id UNION ALL
SELECT 2, 1, 2 UNION ALL
SELECT 3, 1, 3 UNION ALL
SELECT 4, 2, 1;
SELECT * FROM category;
id | judgement_id | category_id |
---|---|---|
1 | 1 | 1 |
2 | 1 | 2 |
3 | 1 | 3 |
4 | 2 | 1 |
-- compare the amounts of this category and any category - they must be equal
SELECT judgement_id
FROM category
GROUP BY judgement_id
HAVING SUM(category_id = 1) = COUNT(*);
| judgement_id | | -----------: | | 2 |<块引用>
-- check that the amount of distinct category values is 1
SELECT judgement_id
FROM category
GROUP BY judgement_id
HAVING MAX(category_id) = 1
AND COUNT(DISTINCT category_id) = 1
| judgement_id | | -----------: | | 2 |<块引用>
-- check that the row with the category which is not equal to specified one not exists
SELECT DISTINCT judgement_id
FROM category
WHERE NOT EXISTS ( SELECT NULL
FROM category cc
WHERE category.judgement_id = cc.judgement_id
AND cc.category_id != 1 )
| judgement_id | | -----------: | | 2 |
db<>fiddle here