2013-12-17 25 views
0

我想更新表的列更新的列:預言:有沒有空值

UPDATE product prod 
SET prod.prod_supplier_id = (SELECT s.prod_supplier_id 
           FROM supplier s 
           WHERE s.prodno = prod.prodno 
          ) 

SELECT s.prod_supplier_id FROM supplier s WHERE s.prodno = prod.prodno

不能返回一個空的結果,如果是空,更新不會做成 如何做到這一點?

回答

4

您需要過濾的行WHERE子句中進行更新,以及:

UPDATE product prod 
SET prod.prod_supplier_id = (SELECT s.prod_supplier_id 
           FROM supplier s 
           WHERE s.prodno = prod.prodno 
          ) 
WHERE EXISTS (SELECT 42 
       FROM supplier s2 
       WHERE s2.prodno = prod.prodno); 

可能使用MERGE(假設prodno是主鍵快是在product):

merge into product 
using 
(
    select p.prodno, 
      s.prod_supplier_id 
    from product p 
    join supplier s on s.prodno = p.prodno 
) t on (t.prodno = prod.prodno) 
when matched then update 
    set prod_supplier_id = t.prod_supplier_id; 

未經測試!

0

WHERE子句指定應更新哪些記錄或記錄。如果您省略WHERE子句,則所有記錄都會更新!

0

我看到prod_supplier_id是產品和供應商中的一列。

你能解釋一下prod_supplier_id在哪個表中不能爲空? 看你查詢你想要的東西就像你面對

update product 
set prod_supplier_id = (select prod_supplier_id 
         from supplier 
         where prod_supplier_id is not null); 

問題:

  • 所有產品記錄將用相同的prod_supplier_id
  • 如果子查詢語句返回多條記錄進行更新-let說你有5個供應商,所以5 prod_supplier_id's,更新語句將失敗。

你能告訴我們:

  • 你希望所有的產品被設置爲1級的供應商?
  • 如果不是,你有哪個產品應該有哪個供應商的清單?

[R

+0

你能粘貼 陳述DESC產品和DESC的輸出供應商 所以我們可以看到表結構? –

+0

的prod_supplier_id是表供應商 – junior

+0

內拉喜的主鍵, 你能張貼 DESC產品 和 DESC供給裝置的輸出 好嗎? 另外,您是否將產品ID存儲在供應商表格中? –

1

首先是創建一個備份表:

CREATE TABLE productBAK AS SELECT * FROM product; 

現在你可以使用更新查詢這樣的:

UPDATE product prod 
SET prod.prod_supplier_id = (SELECT s.prod_supplier_id 
          FROM supplier s 
          WHERE s.prodno = prod.prodno and 
          s.prod_supplier_id is not null 
         ) 
WHERE prod.prodno in (SELECT s1.prodno FROM supplier s1 where s1.prod_supplier_id is not null);