MySQL左外连接查询

时间:2011-12-13 08:24:07

标签: mysql join

我有两张桌子,

第一个表结构(数据):

-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

但它仍显示重复记录,不排除邮件表中的记录

任何想法?或更好的解决方案顺便说一句,我无法改变第一张表并添加一个新字段来检查已发送的电子邮件

提前致谢

1 个答案:

答案 0 :(得分: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

更新:让我们试试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