Postgres意外导致产品有两个类别

时间:2018-04-10 13:44:25

标签: postgresql

我创建了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”类别?

谢谢你的帮助!

1 个答案:

答案 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;