当一个可以为空时,SQL JOIN在两个字段上

时间:2014-02-18 16:27:29

标签: php mysql sql sql-server join

我需要一些关于如何为我的数据中的特定案例创建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”节目的日期,经理和(空白)秘书。

任何人都可以帮助我吗?

谢谢!

1 个答案:

答案 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';