我有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行连接。 我怎么能这样做?
答案 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
子句之后。