【发布时间】:2019-08-27 20:46:27
【问题描述】:
假设我有一个书桌:
CREATE TABLE book (
-- NOTE: the app guarantees that content is ordered by id
id INTEGER PRIMARY KEY,
section TEXT NOT NULL,
verse INTEGER NOT NULL,
content TEXT NOT NULL
);
INSERT INTO book (id, section, verse, content) VALUES
(0, "Prelude", 0, "A long long time ago"),
(1, "Prelude", 1, "I can still remember"),
(2, "Chap", 0, "Something happened"),
(3, "Chap", 1, "Something else happened"),
(4, "Chap", 2, "A weighty climax"),
(5, "End", 0, "The end")
;
我希望能够只用一个 SQL 查询来查询起始诗句和章节中的所有诗句。我可以使用以下 SQL 来做到这一点:
SELECT id, content
FROM book
WHERE
id BETWEEN
(SELECT id FROM book WHERE section == "Prelude" AND verse == 1 LIMIT 1)
AND
(SELECT id FROM book WHERE section == "Chap" AND verse == 2 LIMIT 1)
λ sqlite3 :memory: < tmp.sql
id content
---------- --------------------
1 I can still remember
2 Something happened
3 Something else happe
4 A weighty climax
这涉及 2 个子查询,我不确定这是不是最好的方法。我可以改进此查询以使其不包含子查询(考虑到子查询越少效率越高)?
【问题讨论】: