即使右连接表中没有引用,也可以完全获取左表数据

使用的数据库:SQL Server

我有三个表A,B,C。

表A:

------------------
| ID    |  Name  |
------------------
| 1     |   X    |
------------------
| 2     |   Y    |
------------------

表B:

----------------------
|  ID   |  Date      | 
----------------------
|  1    | 2019-11-06 |
----------------------
|  2    | 2019-11-05 |
----------------------

表C:

----------------------------------
| ID    | B.ID  | A.ID  | Amount |
----------------------------------
| 1     |  1    |  1    | 500    |
----------------------------------
| 2     |  2    |  2    | 1000   |
----------------------------------

我想得到的结果是表A.Name的所有条目及其在表C.amount中的金额,其中表B.Date = 2019-11-06。结果集应包括所有A.name条目,即使表C中没有引用。

必填结果为:

-----------------------
| A.Name   | C.Amount |
-----------------------
| X        |   500    |
-----------------------
| Y        |   NULL   |
-----------------------

我尝试过的代码:

SELECT A.Name,C.Amount
FROM A 
LEFT OUTER JOIN C ON C.A_ID=A.ID
LEFT OUTER JOIN B ON B.ID = C.B_ID ON 
WHERE B.Date='2019-11-06'

我用上面的代码获得的结果是:

------------------
| Name  | Amount |
------------------
| X     |  500   |
------------------

结果中没有Y,这是因为在该特定日期没有Y的条目。我只想将Y和金额显示为零或零。

SQL Fiddle with my query

请帮助我。

JINYAOLUHAIFENG 回答:即使右连接表中没有引用,也可以完全获取左表数据

您的A and B之间没有关系,因此在进行左连接之前,我们需要使用B and Csubquery进行分组,以date进行过滤。

SELECT A.Name,t1.Amount
FROM A 
LEFT JOIN
  (SELECT C.A_ID,C.Amount FROM C 
    INNER JOIN B ON B.ID = C.B_ID 
    WHERE B.Date='2019-11-06') t1
     ON t1.A_ID=A.ID

请参阅dbfiddle

,

试试这个-

Fiddle Here

SELECT A.Name,C.Amount
FROM A
LEFT JOIN B ON A.ID = B.ID AND B.Date = '2019-11-06'
LEFT JOIN C ON B.ID = C.ID

输出为-

Name    Amount
X       500
Y       (null)
本文链接:https://www.f2er.com/3155145.html

大家都在问