使用连接从左表中获取所有数据

Sra*_*mar 4 sql-server sql-server-2008

我有两个表,如下所示.

Id Name                            Id   Status
--------                           -------------------
1   A                              1        Approved
2   B                              6        Approved
3   C                              4        Pending
4   D                              1        Approved
5   E                              1        Pending
6   F                              3        Pending
                                   5        Rejected
Run Code Online (Sandbox Code Playgroud)

现在这就是我想要输出的方式:

Id  Name  Status
-------------------
1    A    Pending
2    B    
3    C    Pending 
4    D    Pending
5    E
6    F
Run Code Online (Sandbox Code Playgroud)

我尝试过使用左连接,但我得到了多行.

select t1.ID,Name,Status from t1 left join t2 on t1.id=t2.id
Run Code Online (Sandbox Code Playgroud)

如果我添加Status = pending我只得到ID 1和3.这是我试过的查询:

select distinct t1.id,name,status from t1 left join t2 on t1.id=t2.id  (this gives me duplicate records i.e id 1 is occurs twice with approved and pending)
Run Code Online (Sandbox Code Playgroud)

并且

select distinct t1.id,name,status from t1 left join t2 on t1.id=t2.id where t2.status='pending'  (gives me only 1,3 and 4)
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我,提前谢谢.

Mar*_*ith 5

要包含来自T1且仅包含来自的所有行T2,status = 'pending'请将条件移动到SQL FiddleON子句中

SELECT t1.ID,
       Name,
       Status
FROM   t1
       LEFT JOIN t2
         ON t1.id = t2.id
            AND t2.status = 'pending' 
Run Code Online (Sandbox Code Playgroud)

只有id在你可以做的欺骗事件中每回一行(小提琴)

WITH CTE AS
(
SELECT DISTINCT id, Status
FROM T2
WHERE Status = 'Approved' 
)
SELECT t1.ID,
       Name,
       Status
FROM   t1
       LEFT JOIN CTE
         ON t1.id = CTE.id
Run Code Online (Sandbox Code Playgroud)