【问题标题】:MYSQL fill column from table valuesMYSQL 从表值中填充列
【发布时间】:2018-11-14 18:39:54
【问题描述】:

我有一个包含这些值的 mysql 表:

Filename  value
FileA1    11
FileA2    12
FileA3    13
FileA4    14
FileA5    15
FileA6    16
FileA7    17
FileA8    18
FileB1    21
FileB2    22
FileB3    23

我希望表格从 FileA(4-8) 的值中填充缺失的 FileB(4-8),如下所示:

Filename  value
FileA1    11
FileA2    12
FileA3    13
FileA4    14
FileA5    15
FileA6    16
FileA7    17
FileA8    18
FileB1    21
FileB2    22
FileB3    23
FileB4    14
FileB5    15
FileB6    16
FileB7    17
FileB8    18

这可以用mysql命令还是必须像那样使用php?

谢谢

【问题讨论】:

  • 源中有FileA7 16; FileA8 17,结果中有FileA7 17;FileA8 18。为什么?
  • 谢谢,更正了拼写错误

标签: mysql mariadb


【解决方案1】:

这样的事情可能会奏效:

select a.filename, a.value
from <table> a

union

select replace(a.filename, 'FileA', 'FileB'), a.value
from <table> a
    left join <table> b on a.filename = replace(b.filename, 'FileB', 'FileA')
where a.fileName like 'FileA'
and b.filename is null;

正确答案

select a.filename, a.value
from testtable a

union

select replace(a.filename, 'FileA', 'FileB'), a.value
from testtable a
    left join testtable b on replace(a.filename, 'FileA', 'FileB') = b.filename
where a.fileName like 'FileA%'
and b.filename is null;

填写缺失数据

insert into testtable (fileName, value)
select replace(a.filename, 'FileA', 'FileB'), a.value
from testtable a
    left join testtable b on replace(a.filename, 'FileA', 'FileB') = b.filename
where a.fileName like 'FileA%'
and b.filename is null;

【讨论】:

  • 不按预期工作:select a.filename, a.value from test a union select replace(a.filename, 'FileA', 'FileB'), a.value from test a left join test b on a.filename = replace(b.filename, 'FileB', 'FileA') 其中 a.fileName like 'FileA' 和 b.filename 为空; +----------+--------+ |文件名 |价值 | +----------+--------+ |文件A1 | 11 | |文件A2 | 12 | |文件A3 | 13 | |文件A4 | 14 | |文件A5 | 15 | |文件A6 | 16 | |文件A7 | 17 | |文件A8 | 18 | |文件B1 | 21 | |文件B2 | 22 | +---------+--------+
  • 您的解决方案已经解决了这个问题。 \n select a.filename, a.value from test a union select replace(a.filename, 'fileA', 'fileB'), a.value from test a left join test b on replace(a.filename, 'fileA' , 'fileB') = b.filename 其中 a.filename like 'fileA%' and b.filename is null;
  • 另一个帮助,如何用结果更新表格,以便将其存储在表格中
  • 我刚刚添加了如何插入缺失的信息。
  • 非常好用.....是否可以为例如指定停止号:仅到 FileB7
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 2013-09-21
  • 1970-01-01
相关资源
最近更新 更多