2016-03-20 12 views
1

2 tablolarım var: Tablo1 kayıtlarını tablo2'de bulunabilecek uygun yaşla güncellemek istiyorum. Benzersiz tanımlayıcı, BVD_ID_NUMBER. Geçersiz:. "% s - 00904. 00000 geçersiz tanımlayıcı: SQL hatası: ORA-00904: "ORBIS_DISTINCT" "BVD_ID_NUMBER" BenOracle'ta güncelleştirme yaparken iç birleştirmeyi kullanma

UPDATE table1 
    SET table1.age = 
    (select table2.age2 
    from 
     (select distinct table2.BVD_ID_NUMBER, table2.age2 
     FROM table1 
     inner JOIN table2 
     on table1.ACQUIROR_BVD_ID_NUMBER=table2.BVD_ID_NUMBER) 
    where table2.BVD_ID_NUMBER=table1.ACQUIROR_BVD_ID_NUMBER); 

aşağıdaki hata aldı Aşağıdaki kodu kullanarak bunu yapmak için çalıştı belirleyici "

Herhangi bir yardım?

cevap

1

Hmmm. Sorgunuzu fazlasıyla karşıladınız. Genellikle, ilişkili alt sorgular kullanılırken, iç alt sorgunun dış tablosundan bahsetmek için bir sebep yoktur. Oracle bağıntılı alt sorgular için bir seviye öteye kapsam izin vermez, bu nedenle korelasyon maddesi için basitleştirmek gerekir: Bu hatanın türünü "alt sorgu birden fazla satır döndürür" neden olabilecek

UPDATE table1 t1 
    SET age = (select t2.age2 
       from table2 t2 
       where t1.ACQUIROR_BVD_ID_NUMBER = t2.BVD_ID_NUMBER 
      ); 

. Bunu gidermek için kullanılması toplama veya rownum = 1:

UPDATE table1 t1 
    SET age = (select t2.age2 
       from table2 t2 
       where t1.ACQUIROR_BVD_ID_NUMBER = t2.BVD_ID_NUMBER and 
        rownum = 1 
      ); 
+0

Bence sadece takma şey .. – sagi

+0

@sagi vermedi, o daha sonra 1 seviye aşağı kapsam çalıştı sanmıyorum. . . Cevabı ben çözdüm. Haklısın. Oracle hata mesajı, sorudaki sorguya açıkça uygun değildi, dolayısıyla onu yok saymayı tercih ettim. –

+0

Bir çekicilik gibi çalışır, altayları sabitler işten çıkar! – Louwinho

İlgili konular