2011-12-13 121 views
1

我有兩個表,MySQL的左外連接查詢

第一表結構(數據):

-id 
-name 
-title 
-mail 
-source_id 

和第二個表(郵件):

-id 
-record_id 
-mail 
-date 

可能會有一些重複記錄在數據表和一些空郵件字段的記錄。 即時消息發送電子郵件給這些客戶端,我想保存誰的郵件隨時間發送郵件表。 ,我想在排除他們的電子郵件已被送往

我用這個查詢記錄:

SELECT * FROM `data` 
LEFT OUTER JOIN `mail` 
ON `data`.`source_id` != `mail`.`record_id` 
WHERE `data`.`mail` != '' 
ORDER BY `data`.`id` ASC LIMIT 1 

我也試過:

SELECT * FROM `data` 
LEFT OUTER JOIN `mail` 
USING(`mail`) 
WHERE `data`.`mail` != '' 
ORDER BY `data`.`id` ASC LIMIT 1 

,但它仍然顯示重複的記錄不排除記錄郵寄表

有什麼想法?或更好的解決方案順便說一句,我不能改變第一個表並添加一個新的領域,用於檢查發送的電子郵件提前

感謝

回答

0

試試這個

,讓我們改變!=IS NOT NULL(我也認爲你應該使用<>代替!=

SELECT * FROM `data` 
LEFT OUTER JOIN `mail` 
ON `data`.`source_id` != `mail`.`record_id` 
WHERE `data`.`mail` IS NOT NULL 
ORDER BY `data`.`id` ASC LIMIT 1 

UPDATE:讓我們嘗試DISTINCT

SELECT (DISTINCT data.email) FROM `data` 
LEFT OUTER JOIN `mail` 
ON `data`.`source_id` != `mail`.`record_id` 
WHERE `data`.`mail` IS NOT NULL 
ORDER BY `data`.`id` ASC LIMIT 1 
+0

謝謝,但問題是沒有過濾空'data'.'mail',你的代碼在過濾中工作正常,但它仍然顯示重複的內容,並且不會從數據集中排除郵件表記錄 – PayamB