使用另一行的字段更新行空值

5n0oy7gb  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(301)

我希望用另一行中的值更新行中的任何空值,这些值通过不同的表链接。其思想是更新初始值,以便从另一个获得任何额外的信息。我创造了这个环境来展示我想要发生的事情。
测试数据:

  1. id value
  2. ------------
  3. 1 null
  4. 2 null
  5. 3 TEST

测试高度:

  1. id1 id2
  2. ------------
  3. 1 2
  4. 1 3

这是我一直未成功使用的查询:

  1. UPDATE test_data AS A
  2. INNER JOIN test_alt ON A.id=test_alt.id1
  3. INNER JOIN test_data AS B ON test_alt.id2=B.id
  4. SET A.value = IF(A.value IS NULL, B.value, A.value);

测试数据的预期结果:

  1. id value
  2. ------------
  3. 1 TEST
  4. 2 null
  5. 3 TEST

查询后结果:

  1. id value
  2. ------------
  3. 1 null
  4. 2 null
  5. 3 TEST

首先应该提到的是:我需要获取任何非空值(哪一个不重要),因此已经得到了一个答案。

hmtdttj4

hmtdttj41#

如果您真的不在乎选择了哪些非空值,那么您可以加入并限制例如

  1. drop table if exists test_data,test_Alt;
  2. create table test_data( id int, value varchar(100));
  3. insert into test_data values
  4. (1 , null),
  5. (2 , null),
  6. (3 , 'TEST'),
  7. (4 , 'anotherTEST');
  8. create table test_alt(id1 int, id2 int);
  9. insert into test_alt values
  10. (1 , 2),
  11. (1 , 3),
  12. (1 , 4);
  13. update test_data t
  14. join (
  15. select id1,value
  16. from test_alt
  17. join test_data on id2 = id
  18. where value is not null
  19. order by value asc limit 1
  20. ) s on s.id1 = t.id
  21. set t.value = s.value
  22. ;
  23. select * from test_data;
  24. +------+-------------+
  25. | id | value |
  26. +------+-------------+
  27. | 1 | anotherTEST |
  28. | 2 | NULL |
  29. | 3 | TEST |
  30. | 4 | anotherTEST |
  31. +------+-------------+
  32. 4 rows in set (0.00 sec)
展开查看全部
uqjltbpv

uqjltbpv2#

也许是这样的?

  1. UPDATE test_data a
  2. SET a.value = (SELECT b.value FROM test_alt c JOIN test_data b ON(c.id2 = b.id)
  3. WHERE a.id = c.id1)
  4. WHERE a.value IS NULL

相关问题