0

我有这个 MySQL 查询,但在我尝试运行它时似乎出现错误。由于我是新手,我想就我应该做些什么来纠正它提出一些建议。我只想显示有 1 个或多个待处理产品的订单的名称、数量和订单日期。非常感谢!

select product.name, order_details.quantity, order.date from product,order_details,order 
inner join order on order_details.order_id=order.id 
inner join product on order_details.product_id=product.id 
inner join customer on order.cust_id=costumer.id WHERE order.pending=>1
4

3 回答 3

2

您有一个名为order的表。这个词在 SQL 中具有特殊的意义。您的选择是重命名表,或者在您想从中查询时引用它。

最简单的解决办法是改变。

inner join order ....

inner join `order`

确保在表名周围使用反引号。

于 2013-01-09T11:14:47.527 回答
0

您有一个名为“order”的表,它是 SQL 中的保留字。

一种解决方案是在表名前加上数据库名称,如Craic Computing 博客中所述 另一种方法是用 ` 字符包装表名,如您在此 StackOverflow 问题中所读

于 2013-01-09T11:14:56.073 回答
0

您可以尝试以下方法:

SELECT product.name, order_details.quantity, `order`.date
FROM product
INNER JOIN order_details ON product.id = order_detail.product_id
INNER JOIN `order` ON `order`.id = order_detail.order_id
WHERE `order`.pending >= 1

正如在其他答案中所说,order是 SQL 中的保留关键字,用反引号括起来。

也许您应该将pending信息存储在order_detail表中(1 表示挂起,0 表示没有),以便跟踪哪个产品仍处于挂起状态,而不是增加/减少order.pending字段。

在这种情况下,您可以进行以下查询:

SELECT product.name, order_details.quantity, `order`.date
FROM product
INNER JOIN order_details ON product.id = order_detail.product_id
INNER JOIN `order` ON `order`.id = order_detail.order_id
WHERE `order_detail`.pending = 1

这将返回您的订单中仍待处理的所有产品,而不是返回可能只有一个待处理的订单中的所有产品。

于 2013-01-09T11:19:39.990 回答