mysql - 连接 3 个表的查询

标签 mysql

我需要编写一个查询来连接 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/

相关文章:

mysql - 合并表而不覆盖mysql phpmyadmin中的现有表

mysql - 从MySQL数据库相关表输出数据

mysql - mysql中%s和%S有什么区别

从单个列中用空格分隔的 MySQL 不同单词

sql - MySQL 类型转换 : Why is float the lowest common denominator type?

php - 在 mysql db 和 PHP 中 x 分钟后删除整行

mysql - 根据列的最小值选择记录,但保留其他约束

mysql - 如果存在两个相同的字段 insert else update

java - JPA查询相当于mysql查询

mysql - 外键和集群