我想知道如果它是可行的(在一個查詢中,如果可能的話),使查詢返回一個默認值,如果一行丟失?例如需要這2個表,給我的查詢需要2個參數(place_id和USER_ID)如果找不到行,SQL返回默認值[PostgreSQL]
T1
place_id/tag_id
1 2
1 3
1 4
2 4
3 2
4 5
T2
user_id/tag_id/count
100 2 1
100 3 20
200 4 30
200 2 2
300 5 22
正如你看到的,這對用戶/標籤(100,4)丟失。我想歸檔是一個查詢將返回我這3個結果
tag_id/count
2 1
3 20
4 0
我知道,我可以像這樣做到這一點,但它並沒有真正匹配的最終結果爲它只能如果我預先知道TAG_ID ......明明只返回1行..:
SELECT T1.tag_id, T2.count
from T1 t1
left join T2 t2 on t1.tagId=t2.tag_id
where t1.place_id=1
UNION ALL
select tag_id,0
from T1
where not exist (select 1 from T2 where user_id=100 and tag_id=4)
and tag_id=4;
編輯:我的問題是不完整的,有失蹤案件 這裏有一個例子(@a_horse_with_no_name的curtesy)http://sqlfiddle.com/#!12/67042/4
謝謝!
具有'tag_id = 4 **'的行將由外部聯接返回。所有你需要的是使用'coalesce()'將'null'值轉換爲'0'參見這裏的例子:http://sqlfiddle.com/#!12/ed7bf/1 – 2014-11-24 11:18:18
@a_horse_with_no_name我們可以加入不是外部/主鍵的列上的表? – 2014-11-24 11:22:10
您可以使用匹配的數據類型在任何列上連接表。 – 2014-11-24 11:23:14