SELECT WHERE JOINED TABLE 在mysql

时间:2021-04-19 05:06:30

标签: mysql

我有两张一对多的桌子。

判断表

<头>
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。

谢谢

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

相关问题