2009-02-12 30 views
5

Tôi có hai bảng liên quan đến truy vấn này mà tôi cần tạo và tôi không chắc chắn chính xác cách tham gia hai bảng này để cập nhật.CẬP NHẬT sử dụng hai bảng, Ghép nối

Tôi có bảng ITEM và CONSUMER_ITEMS. Bảng ITEM có một mã riêng biệt cho mỗi mục và mã UPC. Tôi cần ghép một chuỗi với ITEM.UPC_CODE thành CONSUMER_ITEMS.NEW_ITEM_CODE nơi CONSUMER_ITEMS.ITEM_CODE = (Danh sách cụ thể của ITEM.ITEM_CODES)

Tôi sẽ cập nhật trường CONSUMER_ITEMS.NEW_ITEM_CODE như thế nào?

Về bản chất, nó sẽ bằng 'chuỗi' || ITEM.UPC nhưng làm cách nào để tôi tham khảo CONSUMER_ITEMS.ITEM_CODE bằng với ITEM_CODE cụ thể trong danh sách ITEM_CODES cần được cập nhật.

Trả lời

9

Âm thanh như bạn muốn:

UPDATE consumer_items ci 
SET new_item_code = (SELECT 'string' || item.upc_code 
         FROM item 
         WHERE item.item_code = ci.item_code 
         ) 
WHERE ci.item_code IN ('a','b','c'); 

Ngoài ra, giả sử có một mối quan hệ chính nước ngoài giữa các bảng và consumer_items có một khóa chính, điều này sẽ làm việc:

UPDATE (SELECT ci.id, ci.new_item_code, item.upc_code 
     FROM consumer_items ci 
       JOIN item ON item.item_code = ci.item_code 
     WHERE ci.item_code IN ('a','b','c') 
     ) v 
SET v.new_item_code = 'string' || v.upc_code 

EDIT: Added WHERE clauses

+0

Về cơ bản, mục của tôi .item_code = ('SET OF VALUES') sẽ tham chiếu item_codes trong CONSUMER_ITEMS – jlrolin

+0

Bạn có ý giống như tôi đã thêm ở trên không? –

+0

Thật kỳ lạ, nó sẽ không cho phép tôi sửa đổi một khung nhìn, và câu lệnh đầu tiên mang lại nhiều giá trị trong một lỗi truy vấn phụ – jlrolin

0

Phải, có vẻ tuyệt vời nhưng item.item_code = ci.item_code không hoạt động vì:

SELECT distinct i.code, i.upc 
FROM item i, consumer_items ci 
WHERE i.ccode = '123132' 
AND i.scode = 'ACTIVE' 
AND i.upc IS NOT NULL 
AND ci.item_code = i.code 
AND i.code IN 
    (SELECT DISTINCT tr.item_code 
    FROM t_r tr 
    WHERE tr.category = 'RRE') 
AND ci.NEW_ITEM_CODE IS NULL 

Đây là danh sách riêng biệt của CODES và UPC được liên kết với các mã được sử dụng nhiều để cập nhật CONSUMER_ITEMS.

new_item_code = (SELECT 'string' || item.upc_code FROM item WHERE item.item_code = (SELECT distinct i.code, i.upc 
FROM item i, consumer_items ci 
WHERE i.ccode = '123132' 
AND i.scode = 'ACTIVE' 
AND i.upc IS NOT NULL 
AND ci.item_code = i.code 
AND i.code IN 
    (SELECT DISTINCT tr.item_code 
    FROM t_r tr 
    WHERE tr.category = 'RRE') 
AND ci.NEW_ITEM_CODE IS NULL)); 

dường như không làm việc

+0

Xin lỗi, nhưng tôi không hiểu bất kỳ điều nào! Có lẽ chúng ta cần xem một số dữ liệu mẫu? –

+0

xem ở trên để có giải thích tốt hơn. – jlrolin

0

Danh sách các i.ITEM_CODE, i.UPC là thế này:

014940 070182132137 
018266 929245021085 
018268 729245021108 
018418 029245022815 
018419 129245022822 
018420 229245022839 
018421 529245022846 
018422 929245022853 

Cột đầu tiên là mã hàng, cột thứ hai là UPCs. Đây là trên bảng ITEMS.

Bảng CONSUMER_ITEMS về cơ bản cũng có CONSUMER_ITEMS.ITEM_CODE. Đó là LINK, nhưng nó cũng có một trường có tên là CONSUMER_ITEMS.NEW_ITEM_CODE. Chúng tôi muốn lấp đầy NEW_ITEM_CODE với UPC từ ITEM_CODE tương ứng trong danh sách ở trên với sự tương thích của 'chuỗi' || UPC MÃ TỪ TRÊN.

Làm thế nào chúng ta tạo ra danh sách đó là:

SELECT distinct i.code, i.upc 
FROM item i, consumer_items ci 
WHERE i.ccode = '123434' 
AND i.scode = 'ACTIVE' 
AND i.upc IS NOT NULL 
AND ci.item_code = i.code 
AND i.code IN 
(SELECT DISTINCT tr.item_code 
FROM tr_table tr 
WHERE tr.category = 'RRE') 
AND ci.NEW_ITEM_CODE IS NULL 

này tạo ra ITEM_CODE, UPC danh sách trên. Tôi cần cập nhật CONSUMER_ITEMS phù hợp với các mã ở trên. Cụ thể, tôi cần cập nhật các trường NEW_ITEM_CODE của họ, các trường này là rỗng, với UPC tương ứng được nối với STRING.

-3

/* + BYPASS_UJVC */

sử dụng gợi ý này nếu bạn đang nhận được sau oracle sai sót ORA-01.779: không thể sửa đổi một cột mà bản đồ vào một bảng không quan trọng bảo tồn

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