0

私は4つのテーブルを持っています。

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

ただし、date_submitted = 2003-01-08 の unique_id_number のみを取得します。代わりにこれを取得したい

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
4

1 に答える 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

主な違いは、実行した LEFT と RIGHT JOIN でありtbl_person、この場合は常にエントリを持つテーブルでグループ化する必要があります。また、WHERE 句を LEFT JOIN 自体にマージして、モニター行に一致しないエントリを除外しないようにする必要があります。

これが機能するsqlfiddleです。

UNIQUE_ID_NUMBER | COUNT
G12345A          | 1      
G23456B          | 0 

参考までに、RIGHT JOIN は通常、SQL ロジックを以前よりも混乱させるのに役立つため、ほとんど使用されません ;)

于 2013-01-08T13:52:17.603 に答える