我创建了3个表:item,item_category和category,当我选择具有两个特定类别的项目时,它返回0行,即使我有包含这些类别的项目...
有谁知道为什么会这样?
例如,我正在使用的没有过滤器的选择是:
SELECT i.item_id, c.cate_friendly_id
FROM item i , item_category ic, category c
WHERE
i.item_id = ic.item_id
AND ic.cate_id = c.cate_id
返回行
1;"aaaa"
1;"7777"
1;"bbbb"
2;"aaaa"
2;"1111"
2;"cccc"
当我选择带有cate_friendly_id =“7777”的项目时,我所期望的也会返回正确的行:
SELECT i.item_id, c.cate_friendly_id
FROM item i , item_category ic, category c
WHERE
i.item_id = ic.item_id
AND ic.cate_id = c.cate_id
AND (
c.cate_friendly_id = '7777'
)
返回1行:
1;"7777"
如果按类别“aaaa”
过滤,则返回2行1;"aaaa"
2;"aaaa"
这也没关系,但是当我用cate_friendly_id =“aaaa”和“7777”选择项目时,没有找到行,例如:
SELECT i.item_id, c.cate_friendly_id
FROM item i , item_category ic, category c
WHERE
i.item_id = ic.item_id
AND ic.cate_id = c.cate_id
AND (
c.cate_friendly_id = 'aaaa'
AND c.cate_friendly_id = '7777'
)
是不是应该归还给我第1项女巫同时拥有“aaaa”和“7777”类别?
谢谢你的帮助!
答案 0 :(得分:1)
这是预期答案,因为任何单个类别行都是'aaaa'
或'7777'
,但不是两者。
您想要的是查询包含两行的项目,一行用于'aaaa'
,另一行用于'7777'
,例如
SELECT i.item_id
FROM item i , item_category ic, category c
WHERE
i.item_id = ic.item_id
AND ic.cate_id = c.cate_id
AND c.cate_friendly_id in ( 'aaaa', '7777')
GROUP BY i.item_id
HAVING COUNT(*) = 2;