Mysql 如何使用从另一个表中选择的值更新表

Mysql 如何使用从另一个表中选择的值更新表,mysql,sql,database,Mysql,Sql,Database,我想用值ABCD更新accountinfo表中的字段标记,并在相同DB的不同表中使用类似选择的查询结果。 查询不会返回任何错误,但也不会返回更新 UPDATE accountinfo SET TAG= 'ABCD' WHERE 'ABCD%' IN (select NAME from hardware where NAME LIKE 'ABCD%'); 中的运算符是相等比较。在字符串文本中使用'%'使它看起来像是某种比较。。。匹配前四个字符 对于accountinfo表中的每一行,无论

我想用值ABCD更新accountinfo表中的字段标记,并在相同DB的不同表中使用类似选择的查询结果。 查询不会返回任何错误,但也不会返回更新

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


中的
运算符是相等比较。在字符串文本中使用
'%'
使它看起来像是某种
比较。。。匹配前四个字符

对于
accountinfo
表中的每一行,无论
accountinfo
中包含什么,查询的
WHERE
子句中的谓词都将计算为TRUE或FALSE。您要么不更新任何行,要么更新所有行


您想更新
accountinfo
中的哪些行

accountinfo
中的行是否与
hardware
中的行“匹配”?你怎么知道这些行是否匹配


编辑:


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

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

hardware
表中有一列名为
NAME
。表中有一些行的
名称
值以
'ABCD'
开头


同样,您想更新
accountinfo
中的哪些行?如何确定要更新的行?

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

UPDATE accountinfo  
SET TAG= 'ABCD' 
WHERE TAG IN (select NAME from hardware where NAME LIKE 'ABCD%');
这将更新硬件名称中以开头的所有标记
abcd

帐户信息和硬件中是否有公共列?您想更新
accountinfo
中的哪些行?(在
accountinfo
中,我们看到的唯一一列是名为
TAG
。我们看到
hardware
表中有一列名为
NAME
,其中一些值以
'ABCD'
开头。您已经识别了
hardware
表中的行。但我们不知道
hardware中的行如何显示。)de>表与
accountinfo
中的行相关。您需要将车备份到马的后面,并找出如何区分
accountinfo
中的行:哪些行需要更新,哪些行不需要更新。硬件中没有与accountinfo匹配的行。我需要的是表a中的标记字段如果硬件中的名称字段以ABCD开头,则ccountinfo将以ABCD更新。名称以“ABCD”开头的所有行@Ebar:您已显示“所有(来自
硬件
表)名称以
开头的
”。您显示了一个四行的示例。但这些行(来自
硬件
表)与
accountinfo
表中的行分开并有区别。您需要某种方法来标识要更新的
accountinfo
中的行。(硬件
表中的行没有告诉我们需要更新
accountinfo
中的哪些行。)帐户信息中有一个与两个数据库匹配的ID行,该行与硬件ID匹配。我可以使用该行匹配它们吗?仍然没有受影响的行。如果没有名称以ABCDYes开头的硬件,则可以在我的问题中看到select查询的结果
UPDATE accountinfo  
SET TAG= 'ABCD' 
WHERE TAG IN (select NAME from hardware where NAME LIKE 'ABCD%');