将范围合并为MySQL的单列?

时间:2013-07-28 06:40:57

标签: mysql sql join

我有一个“开始”和“结束”列,我想用它来合并另一个表的范围。我想将范围的“描述”连接在一起。这可能吗?

以下是我的架构:

CREATE TABLE verses 
(
  `id` int auto_increment primary key,
  `chapter` int(11) NOT NULL,
  `verse` int(11) NOT NULL,
  `description` text
);

CREATE TABLE verses_range 
(
  `id` int auto_increment primary key,
  `chapter` int(11) NOT NULL,
  `start` int(11) NOT NULL,
  `end` int(11)
);

到目前为止,这是我所拥有的,但我无法弄清楚如何合并范围的描述列。它只给出了第一条记录的描述:

SELECT verses_range.*, verses.description
FROM verses_range
INNER JOIN verses
  ON verses_range.start = verses.verse
    AND verses_range.chapter = verses.chapter

我在SQL Fiddle(http://sqlfiddle.com/#!2/0578e/1)中有这个并返回:

ID  CHAPTER START   END DESCRIPTION
1   2   156 162 Donec tincidunt fringilla libero et vestibulum.
2   3   53  (null)  Lorem ipsum dolor sit amet, consectetur adipiscing elit.

但是,我试图让第一条记录的描述值为:

  

Donec tincidunt fringilla libero et vestibulum。 (156)Donec auctor a   velit eu tempor。 (157)Etiam sed lobortis sapien。 (158)整数ut dui   ultricies arcu congue pulvinar。 (159)Proin feugiat dignissim rutrum。   (160)Mauris eu ultrices ligula。 (161)Ut varius id enim tempor porta。   (162)

2 个答案:

答案 0 :(得分:3)

你可以尝试这样......

SELECT verses_range.*, Group_Concat(verses.description)
FROM verses_range
INNER JOIN verses on
    verses_range.chapter = verses.chapter
where start<=verse and verse<=if(isnull(end),start,end)
group by  id,chapter,start,end

SQL Fiddle Demo

答案 1 :(得分:0)

所以,我们得到这样的东西......

SELECT *
  FROM verses_range r
  JOIN verses v
    ON v.verse BETWEEN r.start AND r.END;

| ID | CHAPTER | START | END | VERSE |                                     DESCRIPTION |
----------------------------------------------------------------------------------------
|  1 |       2 |   156 | 162 |   156 | Donec tincidunt fringilla libero et vestibulum. |
|  1 |       2 |   156 | 162 |   157 |                 Donec auctor a velit eu tempor. |
|  1 |       2 |   156 | 162 |   158 |                      Etiam sed lobortis sapien. |
|  1 |       2 |   156 | 162 |   159 |  Integer ut dui ultricies arcu congue pulvinar. |
|  1 |       2 |   156 | 162 |   160 |                 Proin feugiat dignissim rutrum. |
|  1 |       2 |   156 | 162 |   161 |                      Mauris eu ultrices ligula. |
|  1 |       2 |   156 | 162 |   162 |                 Ut varius id enim tempor porta. |

http://sqlfiddle.com/#!2/0578e/1

现在是什么?