MariaDB UPDATE语句未匹配目标行,如何按LOCN1与LOCN2的范围更新LCNT字段?
MariaDB UPDATE语句未匹配目标行,如何按LOCN1与LOCN2的范围更新LCNT字段?
嘿,我一眼就瞅出问题所在啦!你想要更新的是142落在LOCN1到LOCN2区间内的行,但你写的WHERE条件逻辑完全搞反了。
你原来执行的错误语句是:
Update lochave SET LCNT = 11 WHERE LSC = 'E' and (LOCN1 >= 142 and LOCN2 <= 142);
这个条件要求LOCN1必须大于等于142,同时LOCN2必须小于等于142——说白了,只有当LOCN1和LOCN2完全等于142的时候才会匹配,但你的目标行是LOCN1=141、LOCN2=143,142明明在这个区间里,所以这个条件根本命中不了它。
正确的区间包含逻辑应该是:判断142是否大于等于LOCN1,并且小于等于LOCN2。对应的UPDATE语句应该写成这样:
UPDATE lochave SET LCNT = 11 WHERE LSC = 'E' AND LOCN1 <= 142 AND LOCN2 >= 142;
你可以先执行这条SELECT语句验证一下匹配的行:
SELECT id, lsc, lcnt, locn1, locn2 FROM lochave WHERE LSC = 'E' AND LOCN1 <= 142 AND LOCN2 >= 142;
这时候你应该能看到目标行(id=1961),再执行上面的UPDATE语句就能成功把它的LCNT改成11啦。
另外贴一下你之前提供的查询结果,方便对照:
MariaDB [booksgood]> select id, lsc, lcnt, locn1, locn2 from lochave where lsc = 'E'; +------+------+------+------------+------------+ | id | lsc | lcnt | locn1 | locn2 | +------+------+------+------------+------------+ | 1949 | E | 22 | 11.000000 | 143.000000 | | 1950 | E | 22 | 11.000000 | 29.000000 | | 1951 | E | 22 | 29.000000 | 29.000000 | | 1952 | E | 22 | 31.000000 | 49.200000 | | 1953 | E | 22 | ... | ... | | 1961 | E | 22 | 141.000000 | 143.000000 | +------+------+------+------------+------------+
备注:内容来源于stack exchange,提问作者Scott Downey
相关产品推荐
相关产品推荐

