2017-06-14 74 views
1

我有一個MySQL數據庫,其中有表myTable和列id, NameID, InvoiceNo, BilleeNo, Date。行數不斷變化(可能增加或減少)。在單個SQL中更新具有不同值的多行

mytable的:

id NameID InvoiceNo BilleeNo Date 
1  N01  4566   02   01-MAR-2013 
2  N01  unallocated 02   01-MAR-2013 
3  N02  1233   02   01-MAR-2013 
4  N02  1233   02   01-MAR-2013 
5  N02  unallocated 02   01-MAR-2013 
6  N02  1244   02   01-JUN-2013 

我想用一個InvoiceNo具有相同的NameID, BilleeNoDate更新未分配InvoiceNo

更新的表是:

id NameID InvoiceNo BilleeNo Date 
1  N01  4566   02   01-MAR-2013 
2  N01  4566   02   01-MAR-2013 
3  N02  1233   02   01-MAR-2013 
4  N02  1233   02   01-MAR-2013 
5  N02  1233   02   01-MAR-2013 
6  N02  1244   02   01-JUN-2013 

我嘗試此查詢:

UPDATE np as updated_np 
SET invoice_no = old_np.invoice_no 
FROM np as old_np 
WHERE old_np.nameid = updated_np.nameid and 
     old_np.date = updated_np.date and 
     old_np.BILLEE_NO = updated_np.BILLEE_NO and 
     old_np.invoice_no != 'unallocated' and 
     updated_np.invoice_no='unallocated'; 
+1

你能不能也請與我們分享你到目前爲止試圖解決這個問題? –

+0

我嘗試這樣一個:UPDATE NP作爲updated_np SET invoice_no = old_np.invoice_no FROM NP作爲old_np WHERE old_np.nameid = updated_np.nameid和 old_np.date = updated_np.date和 old_np.BILLEE_NO = updated_np.BILLEE_NO和old_np .invoice_no!='未分配'和updated_np.invoice_no ='未分配'; – sjp

回答

0

你可以加入使用填充NameID(+其它列)相同的表和指定的加入子句僅加入已具有已分配發票號的數據集。

UPDATE myTable 
INNER JOIN myTable AS upd 
    ON upd.NameID = myTable.NameID 
    AND upd.BilleeNo = myTable.BilleeNo 
    AND upd.Date = myTable.Date 
    AND upd.InvoiceNo != "unallocated" 
SET 
    myTable.InvoiceNo = upd.InvoiceNo 
WHERE 
    myTable.InvoiceNo = "unallocated" 
0

試試這個

update mytable set InvoiceNo='1233' where id in (select tb1.id from mytable tb1, mytable tb2 where tb1.InvoiceNumber='unallocated' and tb1.NameId=tb2.NameId and tb1.BilleNo=tb2.BilleNo and tb1.Date=tb2.Date) 
+0

我需要使用不同的值更新發票號。 – sjp

相關問題