2013-01-25 49 views
1
SELECT * 
FROM `user` 
LEFT JOIN `user_group` 
    ON `user_group`.`userid` = `user`.`userid` 
LEFT JOIN `email_template` 
    ON `email_template`.`user_id`=`user`.`userid` 
WHERE `user`.`agent_id`='123' 
AND `email_template`.`type`='advertise' 

這是我的sql語句。我正在連接表用戶,用戶組和email_template。問題是,我查詢沒有email_template類型的廣告在表格中整個查詢返回行用戶。相反,我想要1行,email_template類型列爲空。當連接表中沒有一行可用時,左連接不返回行

回答

1

您是否嘗試將email_template過濾器移至連接條件?

這樣做會將過濾器應用於連接而不是WHERE子句。如果應用濾鏡上WHERE那麼你基本上執行INNER JOIN這將導致如果沒有符合標準的要返回行:

SELECT * 
FROM `user` 
LEFT JOIN `user_group` 
    ON `user_group`.`userid` = `user`.`userid` 
LEFT JOIN `email_template` 
    ON `email_template`.`user_id`=`user`.`userid` 
    AND `email_template`.`type`='advertise' 
WHERE `user`.`agent_id`='123' 
1

移動的條件來選擇你要加入的時間email_templatetype='advertise'。基本上WHERE子句會導致記錄被過濾,它與條件匹配。

SELECT * 
FROM `user` 
     LEFT JOIN `user_group` 
      ON `user_group`.`userid` = `user`.`userid` 
     LEFT JOIN `email_template` 
      ON `email_template`.`user_id`=`user`.`userid` AND 
       `email_template`.`type`='advertise' 
WHERE `user`.`agent_id`='123'