加入3个表,其中包含2个where子句

时间:2013-11-26 11:33:05

标签: sql join where multiple-tables

我的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的产品获得结果......这可能吗?感谢您的回复

1 个答案:

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

sqlfiddle demo