我正在使用MySQL。我得到两个字段值A,B作为数字。我需要创建字段值C作为从A到B的逗号分隔值。
例如, 我有三列A,B和c。值为“1”。 B值是'5'。我需要在SQL查询中将C值设置为“1,2,3,4,5”。
实际上,我想从多个表中获取“已停止的机器报告”。我已将值存储为from_machine = 1和to_machine = 5(这是我的错误)。但是没有机器名称为3.如果我计算为(从1开始)它给出5;但答案应该是4.这就是我需要的原因。如果我得到这个,我可以检查IN或NOT IN('1','2','3','4','5')。
请任何人给我一个解决方案。提前谢谢。
答案 0 :(得分:2)
您可以在sqlfiddle
中找到原始问题的答案/*sample data*/
create table foo (a int, b int);
insert into foo values (1, 5);
create table numbers (n int);
insert into numbers values
(1),
(2),
(3),
(4),
(5),
(6),
(7),
(8),
(9),
(10);
/*query*/
select
f.a, f.b, group_concat(n.n)
from
foo f
join numbers n on n.n between f.a and f.b
group by a, b;
/*result*/
| A | B | GROUP_CONCAT(N.N) |
|---|---|-------------------|
| 1 | 5 | 1,2,3,4,5 |
但事实上,你不需要这个。就像我在上面的示例join
中所做的那样BETWEEN
。不要使用IN(...)
进行查询(至少在这种情况下)。
要获取遗失的内容,您可以执行left join
和where your_column is null
。如果您不知道我的意思,请查看this post。