我想更新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
答案 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。