我在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.A
的电子邮件1}}到db2.A
。
一开始我们有
db1.A db2.A
email email
www@ww.ww NULL
结果ii中的想得到
db1.A db2.A
email email
www@ww.ww www@ww.ww
我可以使用任何脚本语言来创建它,但只能使用SQL来完成(此类任务)吗?
答案 0 :(得分: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
,并为您想要的每个列执行此操作。
答案 1 :(得分: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)
答案 2 :(得分: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)
答案 3 :(得分: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;
谢谢大家。