2014-02-18 52 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

相關問題