2013-01-08 61 views
0

我有4張桌子。如何使用JOIN加入

tbl_person: 
    - person_id 
    - unique_id_number 

tbl_plan: 
    - plan_id 
    - plan_name 

tbl_person_plan: 
    - id 
    - person_id 
    - plan_id 
    - is_done 

tbl_monitor_level: 
    - id 
    - unique_id_number 
    - sugar_level 
    - date_submitted 

用戶每天都會在tbl_monitor_level中輸入數據。我只想檢索今天沒有輸入任何數據的所有unique_id_number。

我用這個

select distinct tml.unique_id_number, count(tml.sugar_level) from 
tbl_person tp 
right join 
tbl_monitor_level tml on 
tml.unique_id_number = tp.unique_id_number 
inner join tbl_person_plan tpp on 
tpp.person_id = tp.person_id 
where tml.date_submitted = '2013-01-08' 
group by tml.unique_id_number 

,但它只會得到所有unique_id_number與date_submitted = 2003-01-08 我想這不是

unique_id_number | count 
------------------------- 
G12345A   | 1 
G23456B   | 0 

但因爲它是它將不會得到其他unique_id_number (G23456B)。所有這些unique_id_numbers存在於其他表上。

樣本數據

tbl_person 
    - person_id - 1 
    - unique_id_number - G12345A 

    - person_id - 2 
    - unique_id_number - G23456B 

tbl_plan 
    - plan_id - 1 
    - plan_name - Plan A 

tbl_person_plan 
    - id - 1 
    - person_id - 1 
    - plan_id - 1 
    - is_done - 0 

    - id - 2 
    - person_id - 2 
    - plan_id - 1 
    - is_done - 0 

tbl_monitor_level 
    - id - 1 
    - unique_id_number - G12345A 
    - sugar_level - 100 
    - date_submitted - 2013-01-08 

    - id - 2 
    - unique_id_number - G12345B 
    - sugar_level - 200 
    - date_submitted - 2013-01-07 

以上數據應該是的結果。但我只得到

unique_id_number | count 
------------------------- 
G12345A   | 1 

回答

1

一個LEFT JOIN應該得到這個給你如下:

SELECT tp.unique_id_number, COUNT(tml.id) AS count 
FROM tbl_person tp 
LEFT JOIN tbl_monitor_level tml 
    ON tp.unique_id_number = tml.unique_id_number 
    AND tml.date_submitted = '2013-01-08' 
GROUP BY tp.unique_id_number 

的主要區別是左VS RIGHT JOIN,你做到了,你需要組上在這種情況下始終有一個條目的表格 - tbl_person。另外,WHERE子句需要合併到LEFT JOIN本身中,以避免排除沒有匹配監視行的條目。

這是一個sqlfiddle它的工作。

UNIQUE_ID_NUMBER | COUNT 
G12345A   | 1  
G23456B   | 0 

僅供參考,右連接很少使用,因爲它們通常用來使SQL邏輯更加混亂比現在;)

+0

感謝您的評論,但仍然無法正常工作。 – jantox

+0

@jantox:其實,我忘了解決WHERE過濾器問題 - 已更新。那對你有用嗎? – PinnyM

+0

這將產生給定的上述例子。編號-G12345A計數-1和編號-G23456B計數-1。應該是數字-G12345A count-1和數字-G23456B count-0 – jantox