如何在LEFT表上使用过滤器时LEFT JOIN?

时间:2011-12-28 10:03:05

标签: mysql join filter

我有2个表,我想LEFT JOIN并在LEFT表上过滤结果。 表格是:    -product_table,包含列id和product_name    -order_table,列id,product_id,product_order

我尝试从产品表中选择id为1的行,并且LEFT JOIN订单表,其中产品ID与产品表中的id相同。

我的第一次尝试是这样的:

SELECT * FROM product_table 
WHERE product_table.id = 1
LEFT JOIN order_table
ON order_table.product_id=product_table.id

对于此查询,我收到语法错误。

所以我搜索了如何LEFT JOIN并从LEFT表中过滤结果,我发现在查询中使用LEFT JOIN之后的AND,如下所示:

SELECT * FROM product_table
LEFT JOIN order_table
ON order_table.product_id=product_table.id
AND product_table.id=1

但是这里查询返回所有的product_table行和所有相应的order_table行,所有这些行都已加入,但我想要的只是product_table行,其中id等于1并且与相应的order_table行连接。 我怎么能这样做?

3 个答案:

答案 0 :(得分:4)

试试这个:

SELECT * 
  FROM product_table pt 
    LEFT JOIN order_table ot 
      ON ot.product_id=pt.id
  WHERE pt.id = 1

答案 1 :(得分:1)

您应该像这样重写您的查询:=

SELECT * FROM product_table
LEFT JOIN order_table
ON order_table.product_id=product_table.id
AND product_table.id=1
where product_table.id=1

如果不使用where子句,则从product_table中获取所有记录,并在on子句中放置匹配条件。

答案 2 :(得分:0)

如果仔细查看SELECT的语法,您会发现WHERE子句必须位于JOIN子句之后。