3

我需要查询帮助

假设我有 2 张桌子

tableA
------------------------------------------
id  | name
1   | ABC
2   | DEF
3   | GHI

tableB
------------------------------------------
id  | anotherID  | Amount
1   | 1          | 1000
2   | 1          | 2000 
3   | 1          | 3000
1   | 2          | 4000
2   | 2          | 5000
1   | 3          | 6000

我需要这份清单

jointable
------------------------------------------
id  | anotherID  | Amount
1   | 1          | 1000
2   | 1          | 2000 
3   | 1          | 3000
1   | 2          | 4000
2   | 2          | 5000
3   | 2          | 0
1   | 3          | 6000
2   | 3          | 0
3   | 3          | 0

我需要每一个 id 都有值,甚至每一个 anotherID 值都为 0..

示例:tableA 有 3 个 id 和不同的 anotherID tableB 有 3 条记录,所以我需要 3 * 3 = 9 条记录。

如何用查询做到这一点?我可以使用左连接和联合,但我想知道是否有更有效的方法来做到这一点。

4

1 回答 1

2

SQLFiddle demo

select T1.ID,T2.AnotherId,
       COALESCE(T3.Amount,0) as Amount
FROM TableA as T1
CROSS JOIN (Select distinct anotherID FROM TableB) as T2

LEFT JOIN TableB as T3 on (T1.id=T3.id) 
                          AND 
                          (T2.anotherID=T3.anotherID)

Order by T2.anotherId,T1.Id
于 2013-11-13T11:28:47.993 回答