[英]how to left join a table with a query?
我有三張桌子
usertbl
id | fname | lname
---|-------|------
1 | ali | rahimi
2 | reza | miri
citytbl
id | cityname
---|-------
1 | ahvaz
2 | shiraz
3 | mashad
TBL3
Cityid| userid| Value
------|-------|------
1 | 1 | 10
2 | 1 | 30
我想要的結果是:
Cityid| userid| Value
------|-------|------
1 | 1 | 10
2 | 1 | 30
3 | 1 | 0
1 | 2 | 0
2 | 2 | 0
3 | 2 | 0
我嘗試這樣:
SELECT *
FROM usertbl, citytbl
LEFT OUTER JOIN tbl3 ON
(tbl3.cityid=citytbl.id AND
tb.l3.userid=usertbl.id)
但是沒有用。
我的方法是:
如果您確實希望每個城市的每個用戶都可以使用CROSS JOIN
。
當您最終想要添加值時,請使用LEFT JOIN.
要獲得0而不是NULL(如果Tbl3中沒有匹配項),請使用COALESCE
。
SELECT c.id as Cityid
,u.id as userID
,COALESCE(t3.value,0) as value
FROM usertbl u
CROSS JOIN citytbl c
LEFT OUTER JOIN TBl3 t3
ON t3.userid = u.id
AND t3.cityid = c.id
我還添加了一個rextester來重現它: http: //rextester.com/QBRSS10238
注意!
我不建議您在這里使用CROSS JOIN
。 您真的需要每個城市的每個用戶嗎? 即使他們在TBl3中沒有記錄? 您將擁有很多“ value = 0
”的記錄,並且如果有更多的用戶和城市,返回的記錄量將大大增加。
試想一下,您有一個擁有1500個用戶和80個城市的表格。 您的CROSS JOIN將返回120.000條記錄。 即使只有極少數在表Tbl3中具有匹配項。
如果您只需要用戶和城市,則在Tbl3中有一個條目。 從Tbl3開始選擇,然后僅加入表用戶和城市,例如:
SELECT c.id as Cityid
,u.id as userId
,T3.value
FROM TBl3 T3
INNER JOIN usertbl u
ON T3.userid = u.id
INNER JOIN citytbl c
ON T3.Cityid = c.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.