【问题标题】:SQL JOIN on two fields when one can be empty两个字段可以为空时的 SQL JOIN
【发布时间】:2014-03-18 13:18:14
【问题描述】:

我需要一些关于如何为我的数据中的特定案例创建 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 上都找到匹配项,则仅返回具有该 showID 的节目行。如果 horse_shows 表中的 horse_show_secretaryID 字段为空(这是一个有效条件),则该语句不返回任何行。当 horse_show_secretaryID 字段为空白时,我希望它返回“XYZ”节目的日期、经理和(空白)秘书。

谁能帮帮我?

谢谢!

【问题讨论】:

  • 您使用的是 SQL Server 还是 MySQL?请学会适当地标记您的问题。
  • 对于看似不正确的标签,我深表歉意。我是使用 sql 的新手,我没有意识到在这种特殊情况下我使用的 sql 有所不同。我以为我在问一个一般的 sql 问题。在这种特殊情况下,我使用 mysql 作为一种爱好来构建 wordpress 网站)。但是,我也在工作中使用 sql-server。所以,我认为这两个标签都可能适用于此。

标签: php mysql sql sql-server join


【解决方案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';

【讨论】:

  • 非常感谢。这正是我所需要的。
猜你喜欢
  • 2019-01-18
  • 2013-07-30
  • 1970-01-01
  • 2021-08-12
  • 2013-04-06
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多