MySQL在第二次连接时抛出错误

MySQL在第二次连接时抛出错误,mysql,sql,join,syntax-error,inner-join,Mysql,Sql,Join,Syntax Error,Inner Join,我得到以下错误: #1064-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解可在product_catalog.entity_id上使用的接近“JOIN product_catalog”的正确语法 作为以下查询的结果: SELECT sales_order.created_at , order_item.order_id, sales_order.increment_id, SUM(order_item.qty_ordered) AS qty_ordered , COUN

我得到以下错误:

#1064-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解可在product_catalog.entity_id上使用的接近“JOIN product_catalog”的正确语法

作为以下查询的结果:

SELECT sales_order.created_at , order_item.order_id, sales_order.increment_id, SUM(order_item.qty_ordered) AS qty_ordered , COUNT( * ) 

FROM order_item

JOIN sales_order
ON sales_order.entity_id = order_item.order_id
WHERE sales_order.created_at > '2012-11-15 00:00:00'

JOIN product_catalog
ON product_catalog.entity_id = order_item.product_id
WHERE product_catalog.size = 14

GROUP BY order_item.order_id;

过去,此查询的变体用于按销售订单对不同类型的产品进行分组,我只需要执行一次
JOIN
即可获得所需的所有信息。我遇到的问题来自第二个
连接
。很明显,我遗漏了一些东西,但我真的不确定是什么(

请确保
WHERE
条件毕竟必须是
加入

SELECT sales_order.created_at , order_item.order_id, sales_order.increment_id, SUM(order_item.qty_ordered) AS qty_ordered , COUNT( * ) 

FROM order_item

JOIN sales_order
ON sales_order.entity_id = order_item.order_id

JOIN product_catalog
ON product_catalog.entity_id = order_item.product_id

WHERE product_catalog.size = 14
AND sales_order.created_at > '2012-11-15 00:00:00'
GROUP BY order_item.order_id;

首先,你必须
加入你需要的表。然后在
WHERE
子句之后加入条件。

加入…ON…
子句也是输入条件的一部分,所以你不需要
WHERE
子句,只需添加

SELECT sales_order.created_at , order_item.order_id, sales_order.increment_id, 
       SUM(order_item.qty_ordered) AS qty_ordered , COUNT( * )     
FROM order_item    
JOIN sales_order ON sales_order.entity_id = order_item.order_id
                 and sales_order.created_at > '2012-11-15 00:00:00'
JOIN product_catalog ON product_catalog.entity_id = order_item.product_id
                     and product_catalog.size = 14
GROUP BY order_item.order_id;

请考虑下面的例子,我添加别名。使用它是很好的做法,因为代码更可读。

SELECT SO.created_at , OI.order_id, SO.increment_id, 
       SUM(OI.qty_ordered) AS qty_ordered , COUNT( * )     
FROM order_item  OI  
JOIN sales_order SO ON SO.entity_id = OI.order_id
                 and SO.created_at > '2012-11-15 00:00:00'
JOIN product_catalog PC ON PC.entity_id = OI.product_id
                     and PS.size = 14
GROUP BY OI.order_id;

您的
WHERE
子句位于错误的位置。有关正确的
JOIN
语法,请参阅下面的代码

SELECT sales_order.created_at, 
    order_item.order_id, 
    sales_order.increment_id, 
    SUM(order_item.qty_ordered) AS qty_ordered, 
    COUNT( * )
FROM order_item
JOIN sales_order
    ON sales_order.entity_id = order_item.order_id
    AND sales_order.created_at > '2012-11-15 00:00:00'
JOIN product_catalog
    ON product_catalog.entity_id = order_item.product_id
    AND product_catalog.size = 14
GROUP BY order_item.order_id

WHERE子句在所有连接条件的and处。是的,这很好地解决了它。我显然不知道。:)谢谢!我不知道
上的
可以与
一起使用。谢谢我将尝试一下这个解决方案,并进行学习练习。:)为了改进您的代码,最好在
JOIN
部分保留相关条件。作为示例中的代码,使用
WHERE
(很遗憾)。享受学习:)这个解决方案非常有效。我不知道WHERE语句的位置,我想如果您只需要进行一次连接,这是可以预测的。非常感谢。