我需要一些关于如何为我的数据中的特定案例创建SQL语句的建议。我有两个包含以下字段的表:
horse_shows table
horse_shows.showID
horse_shows.horse_show_date
horse_shows.horse_show_managerID
horse_shows.horse_show_secretaryID - this field is allowed to be empty
show_managers table
show_managers.managerID
show_managers.name
show_managers.email
horse_shows表中的horse_show_managerID和horse_show_secretaryID字段都映射到show_managers表中的managerID。并非所有节目都有一个节目秘书,因此horse_shows表中的horse_show_secretaryID字段可以为空白。
我想打印一个具有特定ID的节目的节目日期,节目经理和节目秘书。如果horse_shows表中的horse_show_secretaryID字段为空白,我希望它只为秘书打印空白。所以我尝试了这个:
SELECT
horse_shows.horse_show_date,
show_managers.name,
show_secretaries.name
FROM horse_shows
JOIN show_managers ON horse_shows.horse_show_managerID = show_managers.managerID
JOIN show_managers as show_secretaries ON horse_shows.horse_show_secretaryID = show_secretaries.managerID
WHERE horse_shows.showID = 'XYZ';
但是,如果在show_managers表中的horse_show_managerID和horse_show_secretaryID上找到匹配项,则上述语句仅返回show with showID的行。如果horse_shows表中的horse_show_secretaryID字段为空(这是一个有效条件),则该语句不返回任何行。当horse_show_secretaryID字段为空时,我希望它返回“XYZ”节目的日期,经理和(空白)秘书。
任何人都可以帮助我吗?
谢谢!
答案 0 :(得分:1)
在它上面使用JOIN
将使用INNER JOIN
,这意味着必须满足连接条件。请改用LEFT JOIN
:
SELECT
horse_shows.horse_show_date,
show_managers.name,
show_secretaries.name
FROM horse_shows
LEFT JOIN show_managers ON horse_shows.horse_show_managerID = show_managers.managerID
LEFT JOIN show_managers as show_secretaries ON horse_shows.horse_show_secretaryID = show_secretaries.managerID
WHERE horse_shows.showID = 'XYZ';