我需要编写一个查询来连接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的几个条目,我的查询显示重复的条目,它也复制了整个列表。
如何编写一个只显示未打开订单但不重复所有内容的查询?
答案 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