2017-03-14 3 views
0

Ich stehe ein Problem in der Update-Klausel. Ich versuche, die unten zu tun:Problem mit dem Update Cluase

update AM1 from DB.AM_7541 AM1, 
(sel distinct TRIM(SB.LCDBDN) NEID, trim(leading '0' from sb.lcdmno) LCDMNO, 
AM.Netw_equip 
from 
DB1.PLTL SB 
inner join DB.AM_7541 AM 
on trim(leading '0' from sb.lcdmno)=AM.accs_meth_num 
where SB.LOAD_DATE in (sel max(load_date),lcdmno,lcdbdn from DB1.PLTL where lcdmno not like ' ' and lcdmno is not null group by lcdmno, lcdbdn) 
and SB.LCDBDN not like '' 

) der 
set Netw_equip=der.NEID 
where AM1.accs_meth_num=der.lcdmno 

Ich muss nehmen Sie die max (load_dt) gruppiert auf lcdmno und lcdbdn. Ich bekomme Fehler wie zu viele Ausdrücke in der Select-Klausel.

Können Sie mir bitte dabei helfen.

für dups Suche:

sel NEID, LCDMNO, COUNT(*) from 
(

sel distinct TRIM(SB.LCDBDN) NEID, trim(leading '0' from sb.lcdmno) LCDMNO, 
AM.Netw_equip 
from 
DB1.PLTL SB 
inner join DB.AM_7541 AM 
on trim(leading '0' from sb.lcdmno)=AM.accs_meth_num 
where SB.LOAD_DATE in (sel max(load_date),lcdmno,lcdbdn from DB1.PLTL where lcdmno not like ' ' and lcdmno is not null group by lcdmno, lcdbdn) 
and SB.LCDBDN not like '') 
group by 1,2 
having count(*)>1 

--- 0 Zeilen Danke, Amit

+0

Sie müssen 'NEID' entfernen, wenn Sie nach Duplikaten suchen. – dnoeth

Antwort

2

Der Fehler ist selbsterklärend, Sie kehren drei Spalten in der Subquery aber vergleichen nur auf eine einzige Zeile .

Entweder umschreiben eine korrelierte Unterabfrage oder eine mehrspaltige Subquery mit:

update AM1 from DB.AM_7541 AM1, 
(sel distinct TRIM(SB.LCDBDN) NEID, 
     trim(leading '0' from sb.lcdmno) LCDMNO, 
     AM.Netw_equip 
    from DB1.PLTL SB 
    inner join DB.AM_7541 AM 
    on trim(leading '0' from sb.lcdmno)=AM.accs_meth_num 
    where (SB.LOAD_DATE, sb.lcdmno, sb.lcdbdn) in 
    (
     sel max(load_date),lcdmno,lcdbdn from DB1.PLTL 
     where lcdmno not like ' ' 
     and lcdmno is not null 
     group by lcdmno, lcdbdn 
    ) 
    and SB.LCDBDN not like '' 
) der 
set Netw_equip=der.NEID 
where AM1.accs_meth_num=der.lcdmno 

Btw, die Anwendung einiger Formatierung wirklich erleichtert das Lesen/Verstehen einer Abfrage.

+0

Ich habe nie 'WHERE ... IN' mit mehreren Spalten gesehen, gut zu wissen +1 –

+0

@TimBiegeleisen: Oracle unterstützt es auch. Einfacher zu schreiben als eine korrelierte Unterabfrage ... – dnoeth

+0

Vielen Dank Dnoeth..Ich konnte das herausfinden..Wie immer, ich bekomme eine Zielzeile, die durch mehrere Quellzeilen aktualisiert wurde. Ich habe die innere Qyuery auf Tippfehler überprüft. t finden Sie irgendeinen .. auch ich habe unterschieden. Kann es ein anderes Problem geben? – user3901666