2009-07-30 5 views
0
SELECT (b.descr || ' - ' || c.descr) description 
FROM table1 a 
    INNER JOIN table2 b ON a.account = b.account 
    INNER JOIN table3 c ON a.product = c.product 
WHERE a.descr = ' ' ; 

Wie aktualisiert man eine Tabelle mit der obigen Unterabfrage? es gibt mehr als eine Reihe fast 8000 Reihen zurück? Wenn Sie irgendwelche Lösungen dafür haben, bitte teilen Sie mit mir?Update-Tabelle mit einer Unterabfrage, die mehr als eine Zeile zurückgibt

+0

Bitte schreiben Sie die create table Skripte - es spart uns alle Zeit. – Liao

+0

Prem, es scheint, Sie haben * vier * Fragen, einschließlich dieser, auf dem * gleichen Problem * Sie konfrontiert sind. 1) http://stackoverflow.com/questions/1199733/getting-extra-rows-after-joing-the-3-tables-using-left-join 2) http://stackoverflow.com/questions/ 1198183/update-a-table-using-the-fields-des-anderen-two-table-please-help-me-in-diesem 3) http://stackoverflow.com/questions/1204563/updating- row-with-subquery-returning-multiple-rows – Liao

+0

Nehmen Sie sich auch etwas Zeit, um die StackOverflow-FAQ zu lesen. (3 Kommentare ich weiß - nächstes Mal besser sein!) – Liao

Antwort

1

Ich verstehe nicht, was Sie genau tun wollen, aber Sie können die Unterabfrage in einer Subselect-Anweisung verwenden:

UPDATE table1 a SET a.descr = (
    SELECT MAX(b.descr || ' - ' || c.descr) 
    FROM table2 b, table3 c 
    WHERE b.account = a.account AND c.product = a.product 
) 
WHERE a.descr = ' ' 

Die MAX() wird nur einen Wert für Sie wählen. Wenn Sie es selbst auswählen möchten, können Sie die Unterabfrage entweder weiter einschränken

+0

@ steve Ich möchte die Tabelle 1 Feld descr durch die Beschreibung der Tabelle2 und Tabelle 3 zu aktualisieren, habe ich mit der Select-Anweisung. Wenn ich versuche, es zu aktualisieren, zeigt es die Fehlerunterabfrage an, die mehr als eine Reihe zurückbringt. Kannst du mir bitte dabei helfen? – Prem

+0

Trifft meine veröffentlichte Aussage nicht zu? –

1

In Oracle & SQL Server, wenn die Unterabfrage mehr als 1 Zeile zurückgibt, meldet die Datenbank Fehler.

Wenn in Ihrem Fall die Werte der Unterabfrage gleich sind, verwenden Sie einfach die MAX() oder MIN() Funktion, damit die DB einen Wert auswählt.

+0

Ich möchte eine Tabelle mit verschiedenen Werten in verschiedenen Zeilen aktualisieren, wenn wir max() verwenden, wird es mit dem gleichen Wert rechts aktualisiert. Wenn ich falsch liege, korrigiere mich. Hilf mir, eine Lösung zu finden. – Prem

0

Versuchen:

UPDATE a SET descr = (b.descr || ' - ' || c.descr) 
FROM table1 a 
    INNER JOIN table2 b ON a.account = b.account 
    INNER JOIN table3 c ON a.product = c.product 
WHERE a.descr = ' ' ; 

Wo es mehrere Zeilen sind, werden tabelle1 mit dem letzten gesehen am Ende.

Rob

Verwandte Themen