与join和where子句一起奋斗

时间:2015-04-19 21:08:58

标签: mysql

我通过phpmyadmin运行一些SQL。我试图用2个表进行查询。第一个xlsws_product包含所有产品信息,第二个xlsws_category_assn包含两列,一列带有类别ID,另一列带有产品ID。类别名称在第三个表格中,但我不需要它们。

我要做的是从产品表中选择ID为210,218和370的类别中的行。这是我到目前为止所尝试的:

SELECT *
FROM xlsws_product
JOIN xlsws_product_category_assn ON xlsws_product.id = xlsws_product_category_assn.product_id
WHERE 
    xlsws_product_category_assn.category_id = '210' OR '218' OR '370'`

这样的结果给了我一堆类别中的24090行,这些类别中应该只有少数几行。这里奇怪的是产品表中有56474行,所以我不确定如何过滤结果。

为了它的地狱,我尝试使用以下查询将我的查询限制为只有一个类别ID:

SELECT *
FROM xlsws_product
JOIN xlsws_product_category_assn ON xlsws_product.id = xlsws_product_category_assn.product_id
WHERE xlsws_product_category_assn.category_id = '210'

这产生了零行...

我确信有一些简单的东西我不知道但是在花了一段时间寻找解决方案之后我就无法弄明白了。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

如果您需要查找category '210' OR '218' OR '370'

中的所有数据

你可以这样做

SELECT * FROM 
xlsws_product xp 
JOIN xlsws_product_category_assn xpc ON xp.id = xpc.product_id 
WHERE 
xpc.category_id in (210,218,370)

如果您需要找到具有所有3个给定类别的产品,您可以

SELECT * FROM 
xlsws_product xp 
JOIN xlsws_product_category_assn xpc ON xp.id = xpc.product_id 
WHERE 
xpc.category_id in (210,218,370)
group by xp.id having count(*) = 3