我有一个“开始”和“结束”列,我想用它来合并另一个表的范围。我想将范围的“描述”连接在一起。这可能吗?
以下是我的架构:
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)
答案 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
答案 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
现在是什么?