2012-06-08 2 views
1

Я БД в MySQL с двумя таблицами, и мне нужно, чтобы сделать запрос, как этотMySQL процедура написания для управления данными

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 до db2.A.

в начале мы имеем

db1.A   db2.A 
email   email 
[email protected]  NULL 

в результате II хотел бы получить

db1.A   db2.A 
email   email 
[email protected]  [email protected] 

я могу сделать это с любым языком сценариев, но это может быть сделано (такие задачи), с помощью только SQL?

ответ

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; 

благодарит всех.

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 реальными именами столбцов, и сделать это для каждого столбца, который вы хотите.

0

Пробовал ли вы с не нулевым условием?

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) 
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) 
+0

в этом заявлении вы никогда не упоминали TableName – user1016265

Смежные вопросы