我有两个表,
第一个表结构(数据):
-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
但它仍然显示重复记录并且不从邮件表中排除记录
有什么想法吗?或更好的解决方案?顺便说一句,我无法更改第一个表并添加一个新字段来检查已发送的电子邮件
提前致谢
最佳答案
试试这个
让我们改变!=
至 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
关于MySQL 左外连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8486176/