我有一个具有一对多关系的数据库( field 、相关类别),如下所示:
venue_id | venue_name
---------------------
1 | venue1
2 | venue2
和类别
venue_id | category_id
---------------------
1 | 5
2 | 7
1 | 8
2 | 5
我想显示 category_id
为 5,但 category_id
为 7 和 8 的所有场所。我尝试使用如下连接:
SELECT distinct(`venue_to_category`.`venue_id`),`venue_name`
FROM `venue_to_category` INNER JOIN `venues`
ON `venues`.venue_id = `venue_to_category`.venue_id
WHERE `category_id` != 7
AND `category_id` != 8
AND `category_id` = 5
但它没有返回正确的结果(事实上我不确定它返回的结果)
最佳答案
您的案例中有 2 件事
- 获取category_id = 5 而不是 7 或 8 的数据
- 获取类别id = 5 且不同时为 7 和 8 的数据
对于第一个,您可以使用
select
v.venue_id,
v.venue_name
from venues v
join categories c on c.venue_id = v.venue_id
where c.category_id = 5
AND NOT EXISTS
(
select 1 from categories c1 where v.venue_id = c1.venue_id
AND c1.category_id in (7,8)
);
第二个
select
v.venue_id,
v.venue_name
from venues v
join categories c on c.venue_id = v.venue_id
where c.category_id = 5
AND NOT EXISTS
(
select 1 from categories c1 where v.venue_id = c1.venue_id
AND c1.category_id in (7,8) having count(*) = 2
);
<强> DEMO
关于MySQL一对多删除特定 'many',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24799442/