如何使用另一个表中的选定值更新表

时间:2015-07-10 16:07:58

标签: mysql sql database

我想更新accountinfo表中的字段TAG,其值为ABCD,并在同一个DB的不同表中使用select like查询的结果。 查询不会返回任何错误,但都不会更新。

UPDATE accountinfo  
SET TAG= 'ABCD' 
WHERE 'ABCD%' IN (select NAME from hardware where NAME LIKE 'ABCD%');
select NAME from hardware where NAME LIKE 'ABCD%'

ABCDABELCHIOR
ABCDABELMARQUES
ABCDAG200CX1

2 个答案:

答案 0 :(得分:0)

IN运算符是一个相等比较。您在字符串文字中使用 '%' 会使您看起来好像想要某种LIKE比较...匹配前四个字符。

对于{{1>}表中的每个,查询的WHERE子句中的谓词将评估为TRUE或FALSE,无论行中的哪一行accountinfo包含。您要么不更新任何行,要么所有行。

您想要更新accountinfo中的哪些行?

有没有"匹配" accountinfo中包含accountinfo行的行?你怎么知道行"匹配"?

编辑:

在硬件中没有与accountinfo匹配的行。

因此,我们必须继续提供的信息:hardware表中有一个名为TAG的列。这是我们唯一知道的专栏。

accountinfo表中有一个名为NAME的列。表格中有些行的hardware值以 NAME 开头。

再次, 'ABCD'中哪些行要更新?您如何确定要更新的行?

答案 1 :(得分:0)

我相信我发现了你的错误: 你必须写:

UPDATE accountinfo  
SET TAG= 'ABCD' 
WHERE TAG IN (select NAME from hardware where NAME LIKE 'ABCD%');

这将更新所有标签,这些标签以硬件名称开头并以 A B C D。