2014-02-18 48 views
0

我需要一些建议来说明如何为我的数据中的特定情况创建SQL语句。我有两个表具有以下字段:当两个字段中的一个可以为空时,SQL JOIN

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表映射到一个经理ID在show_managers表都horse_show_managerID和horse_show_secretaryID领域。并非所有节目都会有一个节目秘书,所以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'节目的日期,经理和(空白)秘书。

任何人都可以帮助我吗?

谢谢!

+1

您使用的是SQL Server还是MySQL?请学会适当地标记您的问题。 –

+0

对于看起来不正确的标签,我表示歉意。我是新来的使用SQL,我没有意识到,在这种特殊情况下,我使用的SQL有所不同。我以为我在问一个普通的sql问题。我在这种特殊情况下使用mysql,我建立WordPress的网站作为一种爱好)。但是,我也在使用sql-server工作。所以,我认为这两个标签可能适用于此。 – user3212454

回答

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'; 
+0

非常感谢。这正是我需要的。 – user3212454

相关问题