【发布时间】:2013-11-01 12:00:13
【问题描述】:
在使用 SQLite 处理移动项目时,我遇到了类似于以下代码的查询:
SELECT col_aa, col_ab FROM tbl_a
WHERE col_ac IN (SELECT col_ba FROM tbl_b WHERE col_bb IN (SELECT col_ca FROM tbl_c WHERE col_cb = 1))
AND col_ad IN (SELECT col_ba FROM tbl_b WHERE col_bb IN (SELECT col_ca FROM tbl_c WHERE col_cb = 1))
很明显,这些子查询是多余和浪费的。
经过一些研究,似乎 CTE(公共表表达式)可能是一种解决方案,但该功能在 SQLite 上不可用。 (因此,我不确定 WITH temp AS 语句是否有效)
有没有更好的方法来重组查询以重用子查询的结果?
【问题讨论】:
-
在 SQLite 中,我通常将子查询数据插入到临时表中。但除非您的查询真的非常昂贵,否则不值得努力。如果只需要一行,可以使用 fake
JOINs 将数据保留在当前数据集中。