我有三个mysql表
items
===========
id title
items_in_categories
============================
id item_id category_id
categories
===========
id title
我想找到所有属于 ALL 所述类别的项目。不是任何一个类别,而是所有类别
例如,如果我想搜索属于类别ID 3和5的所有项目
没有。要搜索的可能类别最多可达20个。
例如,我想获得属于类别ID 1,2,3,4,5,6 ......和20的所有项目
我想尽可能简单地使用。
我已尝试过AND和嵌套的NOT EXISTS,如mysql手册中所述。
没有任何效果。
更新 我想出了这个。
select * from
(select count(*) as counter, item_id from items_in_categories
where category_id in (3, 5) group by item_id)getall
where counter = 2
有更好的方法吗?
答案 0 :(得分:1)
我知道这可以打扮并放入一个查询(你可以将类别计数嵌入到拥有而不是作为单独的查询......我只是认为这更具可读性),但这是我的镜头:
DECLARE @CategoryCount INT;
SELECT @CategoryCount = COUNT(DISTINCT id) AS CategoryCount
FROM categories
WHERE category_id IN (3,5);
SELECT *
FROM items
WHERE item_id IN
(
SELECT item_id
FROM items_in_categories
WHERE items_in_categories.category_id IN (3,5)
GROUP BY item_id
HAVING COUNT(DISTINCT category_id) = @CategoryCount
)
答案 1 :(得分:0)
您可以使用" IN"像这样的条款:
SELECT i.*
FROM items i
WHERE i.id IN (SELECT item_id from items_in_categories where category_id IN (3,5))
答案 2 :(得分:-1)
select * from items i , items_in_categories iic, categories c where i.id = iic.item_id and iic.category_id = c.id and c.id in(select * from category where id in(3,5))
如果您没有从上面的查询中获得不同的项目,您可以在项目的ID上添加DISTINCT。