以下で説明するように、5 つの mysql テーブルがあります。診療所のテーブル
id
name
d_location_subscription テーブル
id
clinic_id
t_id //t_id will contain a foreign key of d_cities, d_states or d_countries table
type "country" "state" "city"
d_countries テーブル
id
name
code
d_states テーブル
id
d_country_id
name
code
d_city テーブル
id
d_state_id
name
code
d_location_subscription テーブルは、場所 (都市、州、または国) に対するクリニックのサブスクリプションを記録するために使用されます。d_location_subscription テーブルを使用して、特定の診療所に登録されているすべての都市を取得することを期待しています。
たとえば、診療所 A がテキサス州に加入している場合、診療所 A のすべての都市 ID を取得できるはずです。
次のSQLクエリを作成しました。見た目は醜いですが、達成したい近い結果を生成します。
select
`d`.`id` AS `clinic_id`,
if((`dct`.`id` is not null),`dct`.`id`,if((`dct1`.`id` is not null),`dct1`.`id`,`dct2`.`id`)) AS `d_city_id`
from ((((((((
`d_location_subscriptions` `dls`
join `clinics` `d`
on((`d`.`id` = `dls`.`clinic_id`)))
left join `d_countries` `dc`
on(((`dc`.`id` = `dls`.`t_id`) and (`dls`.`type` = 'country'))))
left join `d_states` `ds`
on((`ds`.`d_country_id` = `dc`.`id`)))
left join `d_cities` `dct2`
on((`dct2`.`d_state_id` = `ds`.`id`)))
left join `d_states` `ds1`
on(((`ds1`.`id` = `dls`.`t_id`) and (`dls`.`type` = 'state'))))
left join `d_cities` `dct`
on((`dct`.`d_state_id` = `ds1`.`id`)))
left join `d_cities` `dct1`
on(((`dct1`.`id` = `dls`.`t_id`) and (`dls`.`type` = 'city'))))
)
d_location_subscription テーブルに「国」タイプのレコードがある場合、次の結果を受け取ります。返されるレコードの総数は、d_states テーブル レコードの数と同じです。
上記のクエリを変更して、これらの Null 値を取り除くにはどうすればよいですか? そして、これが同様の機能を実現する正しい方法であるかどうか、私にアドバイスしてください。前もって感謝します :)