2017-03-21 3 views
0

Ich habe die folgende SQL-Abfrage (mit Postgre, pgAdmin3)ERROR: mehr als eine Zeile zurück von Unterabfrage

update "Customers" 
set "PID"=(select PID 
from person 
left join "Customers" 
on "Customers"."Email"=person.Email 
where "Customers"."Email"!='' and "Customers"."Email" is not null) 

Die Unterabfrage läuft ganz gut und gibt die Liste der Kunden-E-Mails an die PID abgestimmt gefunden in die Personentabelle.

Ich muss diese Liste der PIDs verwenden, um das PID-Feld in der Customer-Tabelle zu aktualisieren.

Irgendwelche Ratschläge?

+0

Welcher Datentyp ist Spalte PID der Tabelle Kunden? Ihre Anfrage macht keinen Sinn. Weil Sie eine Ergebnisliste in eine einzelne Zelle schreiben. – edi

+1

Sie möchten die Kunden-PIDs mit den Kunden-PIDs aktualisieren? Das scheint nicht viel Sinn zu machen. Und warum schließen Sie sich Kunden an, wenn Sie später mit Outer-Join verknüpfte Datensätze später mit "und" Customers "ablehnen." Email "ist nicht null? Dies scheint auch keinen Sinn zu ergeben. Dann, wenn Sie aktualisieren, füllen Sie die PID jedes Datensatzes mit dem, was die Unterabfrage Ihnen gibt. Sie sagen, die Unterabfrage ruft eine Liste von PIDs ab. Sie versuchen also, jede PID mit der Liste der PIDs zu füllen? Wahrscheinlich nicht. Was willst du wirklich erreichen? –

+0

Sie möchten eine * skalare Unterabfrage *: eine Unterabfrage, die ** genau einen Wert ** ergibt. Deines nicht. – wildplasser

Antwort

3

Es ist nicht ganz klar aus der Abfrage, aber ich denke, Sie suchen so etwas wie:

update "Customers" as c 
set "PID"=p.PID 
from person AS p 
where c."Email"=p.Email 
and c."Email"!='' and c."Email" is not null 
0

Offenbar sowohl Sie ein Genie und ein Gedankenleser dann. Das war genau richtig und genau das, was ich wollte.

Verwandte Themen