2016-04-25 7 views
0

У меня есть SQL-запрос, который подсчитывает точную совокупность, информацию, которую мне нужно обновить, с помощью инструкции UPDATE. Но он содержит некоторые сложные объединения, и я не уверен, как воссоздать этот оператор в инструкции UPDATE. Любая помощь?Преобразование инструкции SELECT в соответствующий оператор UPDATE

Мой запрос здесь:

select distinct c.id 
from implementation.tt_ngma_exclude_emails nee 
join customer c on nee.util_account_id = c.util_internal_id 
join customer_notification_contact cnc on cnc.customer_id = c.id 
left join customer_notification_contact_audit cnca on cnca.customer_id = c.id 
where cnc.changed_on = '2015-11-15 12:30:02'; 

Цель здесь, чтобы обновить конкретное поле в таблице customer_notification_contact, а не таблица реализации я выбрал из. Я хочу, чтобы установить email поле в таблице чпу на NULL везде, cnc.customer_id = c.id

Вот моя попытка, но это не похоже на работу:

UPDATE customer_notification_contact cnc 
(select distinct cnc.customer_id opower_customer_id 
from implementation.tt_ngma_exclude_emails nee 
join customer c on nee.util_account_id = c.util_internal_id 
join customer_notification_contact cnc on cnc.customer_id = c.id 
where cnc.changed_on = '2015-11-15 12:30:02' 
) T2 
SET cnc.email = NULL 
WHERE cnc.customer_id = T2.opower_customer_id; 
+1

Соединения будут оставаться неизменными. просто измените 'select ... from ...' на 'update ...' –

+0

Извините, я думаю, что исходный вопрос был неопределенным. Я хочу ОБНОВИТЬ customer_notification_contact. Не реализация.tt_ngma_exclude_emails. – Asif

ответ

1

пожалуйста, дайте этому попытку просто замените T1.SOME_COLUMN (вторая последняя строка) на свое фактическое имя столбца, которое вы хотите обновить. Я добавил GROUP BY CNC.CUSTOMER_ID, потому что, когда вы обновляете несколько строк, вы должны знать, к какому клиенту принадлежит счет. если вы не пытаетесь обновить все строки с тем же подсчетом, который, как я предполагаю, вы не пытаетесь сделать.

UPDATE customer_notification_contact T1, 
(
select count(distinct c.id) AS MY_COUNT,CNC.CUSTOMER_ID 
from implementation.tt_ngma_exclude_emails nee 
join customer c on nee.util_account_id = c.util_internal_id 
join customer_notification_contact cnc on cnc.customer_id = c.id 
left join customer_notification_contact_audit cnca on cnca.customer_id = c.id 
where cnc.changed_on = '2015-11-15 12:30:02' 
GROUP BY CNC.CUSTOMER_ID 
)T2 
SET T1.SOME_COLUMN = T2.MY_COUNT 
WHERE T1.CUSTOMER_ID = T2.CUSTOMER_ID 

UPDATE после просмотра обновленный вопрос этот должен быть запрос.

UPDATE customer_notification_contact T1, 
(
select distinct c.id 
    from implementation.tt_ngma_exclude_emails nee 
    join customer c on nee.util_account_id = c.util_internal_id 
    join customer_notification_contact cnc on cnc.customer_id = c.id 
    left join customer_notification_contact_audit cnca on cnca.customer_id = c.id 
    where cnc.changed_on = '2015-11-15 12:30:02' 
)T2 
SET T1.EMAIL = NULL 
WHERE T1.CUSTOMER_ID = T2.id 
+0

Я думаю, что это действительно близко к тому, что мне нужно. Я обновил свой вопрос, чтобы быть немного более ясным. – Asif

+0

затем попробуйте добавить ', T1.email = NULL' в конец второй последней строки после того, как вы измените подзапрос T2, как это у вас есть. Вы можете это сделать –

+0

см. Мою обновленную часть ответа внизу –

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