我需要编写一个查询来连接 3 个表。
我的 table 是:
ucommerce_customer
ucommerce_order
ucommerce_order_line
所有 3 个表都有一个名为 order_id 的列。
表 ucommerce_order 有一个名为 order_status 的列。
当 order_status 设置为“open”时,我想显示订单详细信息。
ResultSet myRs = myStmt.executeQuery
("SELECT * FROM ucommerce_customer
INNER JOIN ucommerce_order
INNER JOIN ucommerce_order_line
WHERE ucommerce_order.order_status = 'open'");
我的查询忽略订单状态并显示所有订单(未结订单和已结订单)。
此外,我有多种产品,因此 ucommerce_order_line 有相同 order_id 的多个条目,我的查询显示重复的条目,并且它也复制了整个列表。
如何编写一个仅显示未结订单而不复制所有内容的查询?
最佳答案
在 MySQL 中,on
/using
子句是可选的。这是非常可悲的,因为有人会犯像你一样的错误。您的问题仅提到一列,因此也许这就是 join
所需的全部内容:
SELECT *
FROM ucommerce_customer INNER JOIN
ucommerce_order
USING (orderId) INNER JOIN
ucommerce_order_line
USING (OrderId)
WHERE ucommerce_order.order_status = 'open';
如果客户表确实有一个名为 OrderId
的列(在大多数情况下似乎是个坏主意),我会感到惊讶,因此第一个 USING
子句可能想要使用CustomerId
。
关于mysql - 连接 3 个表的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32802528/