mysql - 如何在该表的左连接后使用左外连接?

标签 mysql sql-server join

我有 4 个表,我想加入这些表以便获取其中必要的数据。

表 A.

id | name | deleted | amount | due_date   | status
1  | a    | 0       | 10     | 2016-07-18 | Unpaid
2  | b    | 0       | 20     | 2016-07-19 | Unpaid
3  | c    | 0       | 15     | 2016-07-18 | Unpaid

表B

id | name   | due_date   | status
1  | a      |            | Unpaid
2  | b      |            | Unpaid
3  | c      |            | Unpaid
4  | d      | 2016-07-19 | Unpaid

表C

id | table_d_id | table_a_id
1  | 1          | 1
2  | 2          | 2
3  | 3          | 3

表D

id | 
1
2
3

我想要做的是检索表 B 中包含 due_date 和未付款状态的数据,并且在表 A 中找不到该数据。

我当前的查询:

SELECT  A.*, B.*, C.*, D.*  
FROM A  
LEFT OUTER JOIN B ON B.name= A.name 
INNER JOIN C ON A.id = C.id  
INNER JOIN D ON C.id = D.id  
WHERE A.deleted=0 AND ((B.due_date < "2016-07-20" AND B.status = "Unpaid") OR (A.due_date < "2016-07-20" AND A.status = "Unpaid")) 
GROUP BY D.id

此查询当前所做的是,它仅获取表中除表 B 中的 id 4 之外的数据,我希望也能检索到该数据,因为它具有未付费状态。

最佳答案

您应该使用左连接(并且在您的示例中,b.column 是名称而不是数字..)

SELECT  A.*, B.*, C.*, D.*  
FROM B  
LEFT JOIN A_cstm ON A.id = A_cstm.id_c  
LEFT  JOIN A ON B.name = A.name 
INNER JOIN C ON A.id = C.id  
INNER JOIN D ON C.id = D.id  
WHERE A.deleted=0 AND ((B.due_date < "2016-07-20" AND B.status = "Unpaid") OR (A.due_date < "2016-07-20" AND A.status = "Unpaid")) 
GROUP BY D.id

表 A_cstm 未在您的模型中描述(为了清楚起见,我已将其删除..) 我已经使用 FROM B 和 left join A 而不是 FROM A .. left join B 更改了连接的顺序

SELECT  A.*, B.*, C.*, D.*  
FROM B  
LEFT  JOIN A ON B.name = A.name 
INNER JOIN C ON A.id = C.id  
INNER JOIN D ON C.id = D.id  
WHERE A.deleted=0 AND ((B.due_date < "2016-07-20" AND B.status = "Unpaid") OR (A.due_date < "2016-07-20" AND A.status = "Unpaid")) 
GROUP BY D.id    

关于mysql - 如何在该表的左连接后使用左外连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38473884/

相关文章:

mysql - 将一列从一个数据库复制到另一个数据库

mysql - 仅通过查询更改MYSQL中的表结构和数据迁移

c# - 在 C# 中对 gridview 进行复杂编辑

php - SQL SELECT 和 PHP 检索使用单表 VS 连接两个表的速度?

sql - SQL Server 2012 Express 中的另一个 LEFT OUTER JOIN 失败

php - 从SQL中的文本字段中提取单词

mysql - 创建一个与 mysql 中的 GROUP BY 一起使用的用户定义函数

sql-server - sql事务不回滚

c# - 多个基表不支持动态 sql 生成

SQL Left Join 仅第一个匹配项