我的SQL查询有问题。我需要加入3个表和2个where子句。
第一张表是:
new_product_to_category
product_id|category_id
3|1507
3|1507
4|1507
第二是:
new_product_to_store
product_id|store_id
3|2
3|3
4|2
最后一个:
new_product_description
product_id|name
3|something
4|something2
查询看起来像
SELECT pts.product_id, pd.name FROM new_product_to_category ptc
LEFT JOIN new_product_to_store pts ON pts.product_id = ptc.product_id AND pts.store_id = 3
LEFT JOIN new_product_description pd ON pts.product_id = pd.product_id
WHERE ptc.category_id = 1507
我需要仅使用符合条款1507且来自商店3的产品获得结果......这可能吗?感谢您的回复
答案 0 :(得分:0)
试试这个:
SELECT pts.product_id, pd.NAME
FROM new_product_to_category ptc
LEFT JOIN new_product_to_store pts ON pts.product_id = ptc.product_id
LEFT JOIN new_product_description pd ON pts.product_id = pd.product_id
WHERE ptc.category_id = 1507
AND pts.store_id = 3
在WHERE子句中进行验证将使您获得new_product_to_category中的所有记录,其中包含可以找到的new_product_to_store和new_product_description的所有信息(LEFT JOIN),最后您将限制为匹配的那些WHERE子句。
通过在ON子句中进行验证,您将使其获得表产品中的所有值,但只有来自new_product_to_store的内容用于具有store_id = 3的内容。
尝试使用sqlfiddle中的两个查询时,您可以看到执行SELECT *时的不同之处,您可以看到为什么您的查询会有更多结果。
编辑: 如果store_id也在new_product_to_category中,您还应该将该验证添加到ON子句(ptc.store_id = pts.store_id):
SELECT *
FROM new_product_to_category ptc
LEFT JOIN new_product_to_store pts ON pts.product_id = ptc.product_id
AND ptc.store_id = pts.store_id
LEFT JOIN new_product_description pd ON pts.product_id = pd.product_id
WHERE ptc.category_id = 1507
AND pts.store_id = 3;