当列的值相等时在同一个 MySQL 表上更新行
Posted
技术标签:
【中文标题】当列的值相等时在同一个 MySQL 表上更新行【英文标题】:Updating on the same MySQL table the row when the values of columns are equals 【发布时间】:2018-06-25 04:33:51 【问题描述】:当列 xID 和 ID 的值相等时,我需要在同一个 mysql 表上更新该行。
这是一个例子:
mysql> SELECT
Euro,
ALMACEN,
Imagen,
xID,
ID
FROM
`tbl_g`
WHERE
xID IN (2025)
OR ID IN (2025);
+--------+----------+--------+------+------+
| Euro | ALMACEN | Imagen | xID | ID |
+--------+----------+--------+------+------+
| 7742,8 | ARGUALAS | NULL | NULL | 2025 |
| NULL | EMPALME | | 2025 | 4441 |
+--------+----------+--------+------+------+
2 rows in set
我尝试了这个 SQL 更新查询但没有成功,因为 xID 编号为 2025 的行没有更新为 ID 2025 的行的值:
mysql> UPDATE `tbl_g` kkk,
`tbl_g` jjj
SET kkk.Euro = jjj.Euro
WHERE
kkk.ID = jjj.xID
AND kkk.xID IS NOT NULL;
Query OK, 0 rows affected
Rows matched: 0 Changed: 0 Warnings: 0
如何解决这个问题?
你能帮帮我吗?
提前感谢您的帮助,非常感谢。
【问题讨论】:
【参考方案1】:使用 JOIN
(自联接)更新表并使用 WHERE
子句检查 Euro
列是否为空。
查询
update `tbl_g` as `t1`
join `tbl_g` as `t2`
on `t1`.`xID` = `t2`.`ID`
set `t1`.`Euro` = `t2`.`Euro`
where `t1`.`Euro` is null;
注意:有可能满足条件的多行。
【讨论】:
【参考方案2】:例如,您需要一个自我加入
drop table if exists t;
create table t(Euro decimal(10,2) , ALMACEN varchar(20), Imagen int, xID int, ID int);
insert into t values
( 7742.80 , 'ARGUALAS' , NULL , NULL , 2025),
( NULL , 'EMPALME' , null , 2025 , 4441);
update t t1 join t t2 on t2.xid = t1.id
set t2.euro = t1.euro;
select * from t;
MariaDB [sandbox]> select * from t;
+---------+----------+--------+------+------+
| Euro | ALMACEN | Imagen | xID | ID |
+---------+----------+--------+------+------+
| 7742.80 | ARGUALAS | NULL | NULL | 2025 |
| 7742.80 | EMPALME | NULL | 2025 | 4441 |
+---------+----------+--------+------+------+
2 rows in set (0.00 sec)
【讨论】:
以上是关于当列的值相等时在同一个 MySQL 表上更新行的主要内容,如果未能解决你的问题,请参考以下文章