1

我在 MySQL 中有 db,有两个表,我需要像这样进行查询

SELECT a.*, b.* from db1.A a1 left join db2.A a2 using(id) where a1.email <> a2.email

所以我想找到那些email在表格中有非空字段db1.A并且他们的电子邮件与来自的相同人的电子邮件不匹配的人db2.A,并写来自db1.Ato 的电子邮件db2.A

一开始我们有

db1.A          db2.A
email          email
www@ww.ww      NULL

结果我想得到

db1.A          db2.A
email          email
www@ww.ww      www@ww.ww

我可以使用任何脚本语言来完成它,但是只能在 SQL 的帮助下完成(此类任务)吗?

4

4 回答 4

1

使用ISNULL表达式!当第一个参数是 时,它使用第二个参数NULL

像这样的东西:

SELECT a.*, ISNULL(b.columnName, a.columnName) as 'columnName'
from db1.A a1
left join db2.A a2 using(id)
where a1.email <> a2.email

您必须将 替换为columnName真实的列名,并为您想要的每一列执行此操作。

于 2012-06-08T12:18:42.030 回答
1

你想要一个更新声明。

Mysql 使用稍微不标准的语法进行更新(我倾向于忘记)。我认为正确的语法是:

update db2
    from db1
    set db2.email = db1.email
    where db1.id = db2.id and (db2.email is null or db2.email <> db1.email)
于 2012-06-08T12:21:46.600 回答
0

您是否尝试过 is not null 条件?

SELECT a.*, b.* 
from db1.A a1 
left join db2.A a2 
using(id)
 where a1.email <> a2.email
and (a1.mail is not null and a2.mail is not)
于 2012-06-08T12:18:44.893 回答
0

在我看来,它可以通过下一个查询轻松实现:

update db2.A a2, db1.A a1 set a2.email=a1.email where a1.id=a2.id and (db2.email is null or db2.email = '') and a1.email <> a2.email;

谢谢大家。

于 2012-06-08T12:52:27.197 回答