2014-11-09 123 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%' 
)