2016-04-25 7 views
0

Ich habe eine SQL-Abfrage, die die genaue Population zählt, deren Informationen ich mit einer UPDATE-Anweisung aktualisieren muss. Aber es enthält einige komplexe Joins und ich bin mir nicht sicher, wie ich diese Anweisung in einer UPDATE-Anweisung neu erstellen soll. Irgendeine Hilfe?Konvertieren einer SELECT-Anweisung in die entsprechende UPDATE-Anweisung

Meine Frage ist hier:

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'; 

Das Ziel hier ist es, ein bestimmtes Feld in der customer_notification_contact Tabelle zu aktualisieren, nicht die Implementierung Tabelle I ausgewählt. Ich möchte das email Feld in der CNC-Tabelle setzen überall auf NULL, das cnc.customer_id = c.id

Hier ist mein Versuch, aber es scheint nicht zu funktionieren:

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

die Joins bleiben gleich. Ändere einfach 'select ... from ...' zu' update ... ' –

+0

Entschuldigung, ich denke, die ursprüngliche Frage war vage. Ich möchte customer_notification_contact aktualisieren. Nicht implementation.tt_ngma_exclude_emails. – Asif

Antwort

1

bitte diese einen Versuch geben Ersetzen Sie einfach T1.SOME_COLUMN (vorletzte Zeile) durch Ihren tatsächlichen Spaltennamen, den Sie aktualisieren möchten. Ich habe GROUP BY CNC.CUSTOMER_ID hinzugefügt, denn wenn Sie mehrere Zeilen aktualisieren, sollten Sie wissen, zu welchem ​​Kunden die Anzahl gehört. es sei denn, Sie versuchen, alle Zeilen mit der gleichen Anzahl zu aktualisieren, von der ich annehme, dass Sie nicht versuchen, dies zu tun.

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 nach aktualisierten Frage sieht dies sollte die Abfrage sein.

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

Ich denke, das ist wirklich nah an dem, was ich brauche. Ich habe meine Frage aktualisiert, um ein wenig klarer zu sein. – Asif

+0

dann versuchen, ', T1.email = NULL' am Ende der vorletzten Zeile hinzuzufügen, nachdem Sie die T2-Unterabfrage geändert haben, wie Sie es haben .. Sie können es tun –

+0

sehen Sie meine aktualisierte Antwort Teil auf der Unterseite –

Verwandte Themen