【问题标题】:Updating on the same MySQL table the row when the values of columns are equals当列的值相等时在同一个 MySQL 表上更新行
【发布时间】:2018-06-25 04:33:51
【问题描述】:

当列 xIDID 的值相等时,我需要在同一个 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

如何解决这个问题?

你能帮帮我吗?

提前感谢您的帮助,非常感谢。

【问题讨论】:

    标签: mysql


    【解决方案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)
      

      【讨论】:

        猜你喜欢
        • 2016-05-15
        • 1970-01-01
        • 2016-01-17
        • 1970-01-01
        • 2014-12-08
        • 2021-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多