我有 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 表中有类型为“country”的记录时,我收到以下结果。返回的记录总数等于 d_states 表记录的数量。
我应该如何通过更改上述查询来摆脱那些 Null 值?如果这是实现类似功能的正确方法,请告诉我。提前致谢 :)