2017-05-01 106 views
0

我已經嘗試過各種類型的聯接,但我無法獲得這個簡單的查詢工作。無論如何,即使表b中沒有相應的條目,我也希望得到表a的結果。我想:MariaDB:左外部聯接不返回行

SELECT a.user_id, 
     a.user_name, 
     b.first_name 
FROM users a 
LEFT OUTER JOIN members b 
ON a.member_uid = b.uid 
WHERE (a.user_name = 'TEST' 
    AND b.active = 1) 

在這種情況下,是B否條目具有b.active = 1。但我認爲,大家都願意列數據將被返回,並從B柱是空。但是,在MariaDB的SQL窗口中運行此查詢時,將返回零行。

任何幫助將不勝感激!

回答

0

左外連接將獲得表a中的所有行/數據,無論它們是否匹配表b中的匹配或不匹配。但是你再次通過在where子句中添加條件來過濾數據。因爲,b中沒有任何b.active = 1的條目,所以不會有輸出。從查詢中刪除b.active = 1,像這樣:

SELECT a.user_id, 
    a.user_name, 
    b.first_name 
FROM users a 
LEFT OUTER JOIN members b 
ON a.member_uid = b.uid 
WHERE a.user_name = 'TEST'; 
+0

好的,同意了。所以我需要在查詢執行後檢查活動狀態。 – AntonSack

1

它的事項是否把事情ONWHERELEFT JOIN時。 ( 「外」 被忽略。)

SELECT a.user_id, 
     a.user_name, 
     b.first_name 
FROM users a 
LEFT OUTER JOIN members b 
    ON a.member_uid = b.uid 
    AND b.active = 1    -- Note 
WHERE a.user_name = 'TEST' 

認爲它是這樣的:

  • 如果ON是假的,保留該行,但所有NULLs
  • 如果WHERE爲false,則不返回該行。