mysql merge two选择交错多行

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

如果标题是抽象的,我很抱歉。
有没有办法在不同的行中交错空字段?
例如,原始表格:

架构:

CREATE TABLE `test` (
`id` int(6),
`name` varchar(20),
`content` varchar(20)
) DEFAULT CHARSET=utf8;
INSERT INTO `test` (`id`, `name`, `content`) VALUES
('1', Null, Null),
(Null, '1', 'aaa'),
(Null, '2', 'bbb'),
('2', Null, Null),
(Null, '3', 'ccc'),
(Null, '4', 'ddd'),
('3', Null, Null),
(Null, '5', 'eee'),
(Null, '6', 'fff');

期望结果:

谢谢你的时间和建议。

7kqas0il

7kqas0il1#

其实没有一个好的方法来实现你的建议。行没有固有的顺序;你所建议的交错假设一个顺序根本不存在。
现在,如果“test x row y”总是属于id=x,那就不同了。。。
像这样的东西应该管用

SELECT tB.id, tA.name, tA.content
FROM t AS tA
INNER JOIN t AS tB ON tA.content LIKE CONCAT('test ', tB.id, ' %')
WHERE tA.id IS NULL
;

或者,您也可以在不使用联接的情况下获得类似的结果,使用字符串函数来提取 idcontent .

omvjsjqw

omvjsjqw2#

不能保证数据库中的行是按您所希望的方式排列的,因此这可能是不可能的,除非有某种方法将名称/内容列的值链接到id列。
如果每个id只与两行相关联,并且测试的名称只是序列号,那么可以将名称Map到id并将它们连接起来(加入 id 1至 name 1和2, id 2至 name 3和4等):

SELECT a.id, b.name, b.content
FROM test a
JOIN test b
ON a.id = CEILING(b.name / 2)

我怀疑不是这样的,所以最终不可能在没有找到将id和其他两列关联起来的方法的情况下执行这个select。

相关问题