Select 来自 MySQL 数据库的复杂范围

Select Complex Range from MySQL Database

我正在尝试 select 来自 mysql 数据库的一系列数据,这里是我的数据库结构。

我正在尝试 select 像这样的东西:创世记(是圣经的第一卷)和第 1 章到第 3 章第 21 节(创世记 1-3:23)。我已正确解析所有数据,但是,我似乎无法创建一个就足够的 SQL 查询。

以下是我当前的语法,仅来自第 1-3 章的 selects,其中节数 <= 21。我需要它只在到达最后一章时使用 verse 参数,而不是将 verse <= 21 应用于 1 到 3 之间的每一章。

SELECT `book`, `chapter`, `verse`, `text` 
from `bible` 
WHERE version = 'kjv' 
AND book = 1 
AND chapter >= 1            
AND ( chapter <= 3 AND verse <= 21 )

我将 sql 语句放入两个语句中,以便更清楚地了解我要完成的任务。我只是想弄清楚如何(如果可能的话)将这两个陈述结合起来并仍然有相同的回应。现在我只查询两次然后合并结果。

SELECT `book`, `chapter`, `verse`, `text` 
from `bible`
WHERE version = 'kjv'
AND book = 1 
AND chapter >= 1
AND chapter <= 2

SELECT `book`, `chapter`, `verse`, `text`
from `bible`
WHERE version = 'kjv'   
AND book = 1 
AND chapter = 3                 
AND verse <= 10
SELECT `book`, `chapter`, `verse`, `text` 
from `bible` 
WHERE version = 'kjv' 
AND book = 1 
AND 
(
  chapter in (1,2)
  OR (chapter = 3 AND verse <= 21)
)

我不完全确定这是否是您的意思,但希望:

select distinct
    `book`, `chapter`, `verse`, `text` 
    from `bible` 
    where (
            case
                when `chapter` < ( select max( `chapter` ) from `bible` where `book`=1 ) then
                    `version`='kjv' and `book`=1 and `chapter` in ( 1,2,3 )
                else
                    `version`='kjv' and `book`=1 and `chapter` in ( 1,2,3 ) and `verse` <= 21
            end
        );