我正在尝试使用内部联接执行查询并添加一个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);
答案 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查询的允许语法,以了解需要在何处放置不同部分。