2014-05-10 127 views
-1

我想通過讀取一個整個表從數據庫中獲取數據,只有在第一個指定的字段不爲NULL時才加入另一個和多個,但最後一個。以下是查詢:如果字段不爲空,MYSQL JOIN

SELECT a.*, u1.Name, u2.Name FROM `articles` a 
JOIN `users` u1 ON (a.id=1 AND u1.`id` = a.`authorid`) 
JOIN `users` u2 ON (a.`updaterid` IS NOT NULL AND u2.`id` = a.`updaterid`) 

應該工作好,但它不。它返回有效的結果,如果updaterid不是NULL,但如果是,我一直得到空結果。任何想法在這一個?

PS我也嘗試過一些組合,例如,與WHERE或不同類型的JOIN。

+1

考慮提供適當的DDL(和/或sqlfiddle)連同SET – Strawberry

+0

我建議想要的結果閱讀手冊 – mleko

回答

8

如果我理解你正確地(你沒有提供任何examlpe數據),這個查詢提供你想要的數據:

SELECT a.*, u1.Name, u2.Name FROM `articles` a 
JOIN `users` u1 ON (a.id=1 AND u1.`id` = a.`authorid`) 
LEFT JOIN `users` u2 ON (a.`updaterid` IS NOT NULL AND u2.`id` = a.`updaterid`) 

u2.NameNULL如果a.updaterid IS NULL`(或更新用戶被刪除),否則將保存該名稱。

+0

可以看出,這裏不需要示例數據。整個案例是關於概念。這留下了加入那裏工作很好,非常感謝! :) – travisspears

+1

有關使用JOIN和LEFT JOIN時的情況,請參閱http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/ –

1

使兩個連接外部連接。

SELECT a.*, u1.Name, u2.Name 
FROM `articles` a 
    Left JOIN `users` u1 
     ON u1.`id` = a.`authorid` 
     AND a.id=1 
    left JOIN `users` u2 
     ON u2.`id` = a.`updaterid` 
     AND a.`updaterid` IS NOT NULL 

,一旦你做,你可能不需要is not null條件...

SELECT a.*, u1.Name, u2.Name 
FROM `articles` a 
    Left JOIN `users` u1 
     ON u1.`id` = a.`authorid` 
     AND a.id=1 
    left JOIN `users` u2 
     ON u2.`id` = a.`updaterid` 
相關問題