查询一对多表并返回任何现有数据(如果id不存在)

时间:2014-08-19 14:21:36

标签: mysql sql stored-procedures inner-join

我有2个数据库表:

Doctors: ID
Doctors_Sub: Doctors.ID, LanguageID, Name

我想根据ID获取特定医生,并按LanguageID获取其子数据,但如果LanguageID不存在,我想获得其他任何内容。

因此,如果Doctor 1只有Lanuage 1的数据。如果我查询Doctor 1 for Language 2,我想返回语言1.

这是我到目前为止的地方:

select dr.id, df.name 
from doctors dr
left outer join doctors_defs df ON dr.id = df.doctor_id
where dr.id = drid and (df.lid = lid or lid > 0)
limit 1

这将随机返回任何语言。我希望它首先查看我请求的语言是否存在,否则返回任何其他

由于

1 个答案:

答案 0 :(得分:1)

使用doctor_defs表两次加入,一次使用指定语言获取名称,第二次使用子查询为每位医生选择一个名称。然后使用IFNULL来选择指定的语言。

SELECT dr.id, IFNULL(df1.name, df2.name) AS name
FROM doctors AS dr
LEFT JOIN doctor_defs AS df1 on dr.id = df1.doctor_id AND df1.languageID = @lid
LEFT JOIN (SELECT doctor_id, MAX(name) AS name
           FROM doctor_defs
           GROUP BY doctor_id) AS df2 ON dr.id = df2.doctor_id
相关问题