当列的值相等时更新同一mysql表中的行

a8jjtwal  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(224)

当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

如何解决这个问题?
你能帮助我吗?
提前感谢您的帮助,非常感谢。

f4t66c6m

f4t66c6m1#

例如,您需要一个self-join

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)
sxissh06

sxissh062#

使用 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;

注意:有可能有多行满足条件。

相关问题