查询加入3个表

时间:2015-09-26 22:11:26

标签: mysql

我需要编写一个查询来连接3个表。

我的表是:

ucommerce_customer

ucommerce_order

ucommerce_order_line

所有3个表都有一个名为order_id的列。

表ucommerce_order有一个名为order_status的列。

当order_status设置为"打开"我想显示订单详情。

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的几个条目,我的查询显示重复的条目,它也复制了整个列表。

如何编写一个只显示未打开订单但不重复所有内容的查询?

2 个答案:

答案 0 :(得分:0)

我建议使用自然连接。也许这就是错误的来源。

可以通过运行SELECT DISTINCT * ...

删除重复项

答案 1 :(得分:0)

在MySQL中,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

如果customer表确实有一个名为USING的列(在大多数情况下看起来不是一个坏主意),我会感到惊讶,因此第一个CustomerId子句可能想要使用size == null