2017-06-14 88 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

相关问题