2017-02-18 5 views
0

Kann jemand bitte helfen, diese eine Abfrage zu arbeiten. Ich versuche Status einer Spalte in einer Tabelle zu aktualisieren, um andere TabellenProbleme bei der Aktualisierung der Abfrage mit Inner Join

Hier verbunden zu haben, ist die Abfrage

update 
(select I.account_id, I.sts, I.name_id, CI.CRM_TYPE, I.comments 
    from PPInters I 
     inner join DW.CUST CT 
     on I.account_id = CT.account_id 
     where 
      I.sts is null 
      AND I.comments IS NOT NULL 
      AND CT.CUSTTYPe = 'INTNL') T 

SET T.STS = 'D' 

WHERE T.account_id IN (2000208927,380166014,190180447,166078041,105029075 ) 

Ich erhalte „ORA-01779: kann keine Spalte ändern, die zu einem nicht Keymaps -preserved Tabelle“Fehler

Was ich versuche, hier zu tun ist, um Satz I.STS =‚D‘ für rund 700 Datensätze nach oben gezogen mit dieser Abfrage

select I.account_id, I.sts, I.name_id, CI.CRM_TYPE, I.comments 
      from PPInters I 
       inner join DW.CUST CT 
       on I.account_id = CT.account_id 
       where 
        I.sts is null 
        AND I.comments IS NOT NULL 
        AND CT.CUSTTYPe = 'INTNL' 

Ich schätze es

+0

Was die 'CI' ist Tabellen-Alias ​​in Ihre 'Select'-Klausel? – mathguy

Antwort

1

Assumming dass account_id ein Primärschlüssel kolumn in der Tabelle ist PPInters,
, die es Wert ist eindeutig identifiziert Datensätze in dieser Tabelle:

UPDATE PPInters 
SET STS = 'D' 
WHERE account_id IN (

      select I.account_id 
       /*, I.sts, I.name_id, CI.CRM_TYPE, I.comments */ 
      from PPInters I 
       inner join DW.CUST CT 
       on I.account_id = CT.account_id 
       where 
        I.sts is null 
        AND I.comments IS NOT NULL 
        AND CT.CUSTTYPe = 'INTNL' 

) 
AND account_id IN (2000208927,380166014,190180447,166078041,105029075 ) 
+0

Das funktioniert - Vielen Dank –