内部连接中的mysql语法错误

时间:2018-08-29 14:21:45

标签: mysql sql

我正在尝试使用内部联接执行查询并添加一个where,但是出现以下错误:

  

1064-您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本以使用正确的语法   靠近'where order.user_id = 31)

查询结构如下:

SELECT
    orders.id,
    order_details.order_id,
    orders.user_id,
    orders.numero_orden,
    order_details.part_id,
    order_details.cantidad
FROM
((orders
    INNER JOIN order_details
        ON orders.id = order_details.order_id
    where orders.user_id = 31) 
INNER JOIN parts
    ON order_details.part_id  = parts.id);

2 个答案:

答案 0 :(得分:1)

您的查询看起来像您正在尝试使用MS Access语法。在MySQL中,您不需要用括号包装多重联接的组件。考虑以下版本:

SELECT
    o.id,
    od.order_id,
    o.user_id,
    o.numero_orden,
    od.part_id,
    od.cantidad
FROM orders o
INNER JOIN order_details od
    ON o.id = od.order_id
INNER JOIN parts p
    ON od.part_id  = p.id
WHERE
    o.user_id = 31;

注意:我将查询重构为使用表别名,从而使其更易于阅读。另外,我真的看不到连接到parts表的意义,因为您从中没有选择任何内容。也许您打算这样做,但是并没有将它纳入您的问题。

答案 1 :(得分:1)

您不能在此处放置WHERE子句,它必须放在结尾,或者可以尝试将其保留在原处,并用AND替换WHERE,以使其成为join子句的一部分。我认为结果将是相同的。

所以:

SELECT
    orders.id,
    order_details.order_id,
    orders.user_id,
    orders.numero_orden,
    order_details.part_id,
    order_details.cantidad
FROM
    orders
    INNER JOIN order_details
        ON orders.id = order_details.order_id
    INNER JOIN parts
        ON order_details.part_id  = parts.id
WHERE 
    orders.user_id = 31;

SELECT
    orders.id,
    order_details.order_id,
    orders.user_id,
    orders.numero_orden,
    order_details.part_id,
    order_details.cantidad
FROM
    orders
    INNER JOIN order_details
        ON orders.id = order_details.order_id
           AND orders.user_id = 31
    INNER JOIN parts
        ON order_details.part_id  = parts.id;

不确定在联接中是否真的需要那些括号,因此我删除了它们。我建议也许您应该更详细地研究SQL查询的允许语法,以了解需要在何处放置不同部分。