2014-11-09 86 views
0

從另一個表中的值與我想根據表2更新ClaimNosdeclarationNos table1中。更新一個表使用select語句

UPDATE sg_report 
SET ClaimNo = (
    SELECT MAX(dummy.ClaimNo) as ClaimNo 
    FROM dummy 
    WHERE ClaimNo REGEXP '^[0-9]+$' and sg_report.DeclarationNo = dummy.DeclarationNo 
) 
WHERE dummy.DeclarationNo = (
    SELECT DISTINCT dummy.DeclarationNo 
    FROM dummy 
    WHERE dummy.DeclarationNo LIKE '30%' 
) 

此查詢不提供任何錯誤,但它也不工作。怎麼了 ?

+0

什麼是正則表達式和它的目的是什麼? – 2014-11-09 06:35:05

+0

明杆的有claimNo一些垃圾文本值,因此正則表達式的所有如果你想要求的最大無這是claimNo – Mk5352 2014-11-09 06:42:20

+0

的垃圾文字去抓取一個數字。然後將查詢應該是這樣的:SELECT MAX(dummy.ClaimNo REGEXP '^ [0-9] + $')作爲ClaimNo從虛擬WHERE sg_report.DeclarationNo = dummy.DeclarationNo。此外,請確保您的第二個內部查詢不應該返回多個值,因爲您使用了LIKE '30%',這可能導致超過1個值。如果該情況使用IN運算符而不是=運算符,請檢查以下行:dummy.DeclarationNo In而不是dummy.DeclarationNo = – 2014-11-09 06:57:02

回答

0

首先,我認爲複製您的查詢錯誤。你有WHERE dummy.DeclarationNo,我懷疑你實際上有WHERE sg_report.DeclarationNo

Paresh J是正確的,您的WHERE聲明應包含IN而不是平等聲明,因爲它可能會返回多行。

但回答你的問題,我懷疑是相關的數據類型。我創建了一個示例數據庫,並運行以下查詢,它工作得很好。我居然花了,而試圖因爲它沒有更新任何調試它,直到我意識到沒有什麼更新

UPDATE sg_report 
SET ClaimNo = (
    SELECT MAX(dummy.ClaimNo) as ClaimNo 
    FROM dummy 
    WHERE ClaimNo REGEXP '^[0-9]+$' AND sg_report.DeclarationNo = dummy.DeclarationNo 
) 
WHERE sg_report.DeclarationNo IN (
    SELECT DISTINCT dummy.DeclarationNo 
    FROM dummy 
    WHERE dummy.DeclarationNo LIKE '2%' 
)