如果标题是抽象的,我深表歉意。
有没有办法在不同行中交织空字段?
例如原始表格:
模式:
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');
所需结果:
答案 0 :(得分:1)
实际上并没有一种很好的方法来完成您的建议。行没有固有的顺序。您建议的交织假设一个不存在的顺序。
现在,如果“ 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
;
或者,使用字符串函数从 id
中提取content
,也可以在没有连接的情况下获得类似的结果。
答案 1 :(得分:1)
不能保证数据库中的行按所需的顺序排序,因此,除非有某种方法可以将name / content列的值链接到id列,否则这不可能。
如果每个ID仅与两行相关联,并且测试的名称只是顺序编号,则可以将名称映射到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与其他两列相关联的情况下进行此选择。