2017-03-14 10 views
0

私は更新句で1つの問題に直面しています。私は以下のやろうとしています:私はlcdmnoとlcdbdnにグループ化された最大値(load_dt)を取らなければならない更新の問題が発生しました

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 

。 select節にあまりにも多くの式があるようなエラーが発生しています。

私にこれを手伝ってもらえますか? DUPのためにチェック

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行 おかげで、 アミット

+0

ダブをチェックするときは、NEIDを削除する必要があります。 – dnoeth

答えて

2

エラーは自己説明で、あなただけのサブクエリに3つの列を返すが、単一の行に比較します。

相関サブクエリまたは複数列のサブクエリを使用して書き直し次のいずれか

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 

はところで、実際にいくつかの書式設定を適用すると、クエリを理解する/読み込む簡素化します。

+0

複数の列を持つ 'WHERE ... IN'を見たことがないので、知っておいてください+1 –

+0

@TimBiegeleisen:Oracleもサポートしています。相関サブクエリよりも簡単に書くことができます... – dnoeth

+0

ありがとうDnoeth ..私はそれを理解することができました。しかしながら、複数のソース行によって更新されたターゲット行を取得しています。私はdupsのために内側のqyueryをチェックしました。私は別のものを使っています。他に問題はありますか? – user3901666

関連する問題