用于数据管理的MySQL程序编写

时间:2012-06-08 12:16:07

标签: mysql sql stored-procedures

我在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来完成(此类任务)吗?

4 个答案:

答案 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;

谢谢大家。