2011-09-28 28 views
7

Tôi có hai bảng khác nhau: Table_a và Table_b, cả hai đều có cùng cột PartNo và Material_Desc. Tôi muốn Material_Desc trong Table_b cập nhật Material_Desc trong Table_a khi PartNo bằng. Đây là truy vấn của tôiSQL ORACLE ORA-00969: thiếu từ khóa ON?

MERGE INTO Table_b 
USING (SELECT t1.rowid AS rid 
       , t2.Material_Desc 
     FROM Table_b t1 
      JOIN Table_a t2 
      ON Table_b.PartNo = Table_a.PartNo) 
ON rowid = rid 
WHEN MATCHED THEN 
    UPDATE 
    SET Table_a.Material_Desc = Table_b.Material_Desc; 

Tôi biết Oracle không hỗ trợ kết nối để cập nhật vì vậy tôi đã thử truy vấn trên. Tuy nhiên nó mang lại cho tôi ORACLE ORA-00969: thiếu lỗi từ khóa ON

+0

Xem nhận xét của tôi về câu trả lời này: http://stackoverflow.com/a/2446859/244826 – Sonny

+1

Điều kiện sau khi 'ON' ** phải ** nằm trong dấu ngoặc đơn: 'ON (rowid = rid)' –

Trả lời

6

Bạn có thể đặt "(" và ")". Vì vậy, viết:

ON ( rowid = thoát khỏi )

2

Trước hết, vấn đề cú pháp: khi bạn hợp nhất bằng truy vấn phụ, bạn phải đặt bí danh cho một từ khóa. Nhưng quan trọng hơn, bạn không cần sử dụng truy vấn phụ.

MERGE INTO Table_a USING Table_b ON (Table_a.PartNo = Table_b.PartNo) 
WHEN MATCHED THEN UPDATE SET Table_a.Material_Desc = Table_b.Material_Desc 

Trước hết, bạn phải đặt bảng bạn muốn cập nhật vào phần INTO. Thứ hai, làm việc tham gia trong một subselect và sáp nhập vào rowids sẽ không cung cấp cho bạn bất kỳ lợi ích mà tôi có thể nghĩ đến.

+0

đang nhận ORA-30926: không thể nhận được một bộ hàng ổn định trong lỗi bảng nguồn cho truy vấn trên – sailaja

+0

Có thể điều này giúp hiểu ORA-30926: https : //forums.oracle.com/forums/thread.jspa? threadID = 257751 xem nhận xét cuối cùng. –

+0

xin lỗi tôi đã không nhận được nó từ bình luận cuối cùng của liên kết ở trên. Xin vui lòng giúp tôi ra ngoài. – sailaja

0

có lẽ không hiệu quả như một Statment hợp nhất, nhưng nên làm việc:

update table_b tb 
set tb.Material_Desc = (select ta.Material_Desc 
         from table_a ta 
         where ta.PartNo = tb.PartNo 
         and rownum = 1 
         ) 
where tb.rowid in (
        SELECT t1.rowid      
        FROM Table_b t1 
         , Table_a t2 
        WHERE t1.PartNo = t2.PartNo 
        ) 
+0

Truy vấn này cho ORA-01427: truy vấn con một hàng trả về nhiều lỗi một hàng. – sailaja

+0

@sailaja: Tôi đã giả định rằng partno là duy nhất. Tôi đã điều chỉnh câu trả lời của tôi, vì vậy chỉ mục nhập đầu tiên được lấy – schurik

+0

Không, mỗi Part_No có nhiều giá trị như cho ex.001A có 100 mục và 001B có 50 mục với Serial_No duy nhất, nhưng Mô tả giống nhau, vì vậy tôi có một giá trị khác table (table_a) chỉ giữ PartNo & Material_Desc, tôi muốn cập nhật tất cả các desc cho các PartNo này từ table_a này – sailaja

Các vấn đề liên quan