2011-12-13 141 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