簡體   English   中英

如何離開與查詢表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM