此查询给了我7条结果:
sqlite> SELECT DISTINCT film.id FROM film
INNER JOIN film_release ON film_release.fk_film = film.id
INNER JOIN film_release_files ON film_release.id = film_release_files.fk_film_release
INNER JOIN file ON file.id = film_release_files.fk_file
ORDER BY download_date DESC LIMIT 7;
id
----------
4525
4530
4529
4528
4527
4524
4526
如果我将这7个ID放在IN子句中进行选择,则只会得到6个结果:
sqlite> SELECT DISTINCT film.id FROM film
INNER JOIN film_details ON film.id = film_details.fk_film WHERE film.id in (
SELECT DISTINCT film.id FROM film
INNER JOIN film_release ON film_release.fk_film = film.id
INNER JOIN film_release_files ON film_release.id = film_release_files.fk_film_release
INNER JOIN file ON file.id = film_release_files.fk_file
ORDER BY download_date DESC LIMIT 7
)
ORDER BY film.title, film.year;
id
----------
4525
4524
4527
4528
4529
4530
但是,如果我将内部查询的结果作为列表而不是select语句复制并粘贴到列表中,则会得到全部7个结果:
sqlite> SELECT DISTINCT film.id FROM film INNER JOIN film_details ON film.id = film_details.fk_film WHERE film.id in (
4525, 4530, 4529, 4528, 4527, 4524, 4526
) ORDER BY film.title, film.year;
id
----------
4525
4524
4526
4527
4528
4529
4530
这是怎么回事?有解决此问题的解决方法吗?我在这里误解了什么,还是一个错误?
我在3.8.7.1 2014-10-29 13:59:56 3b7b72c4685aa5cf5e675c2c47ebec10d9704221。 但是我在3.8.2 2013-12-06中没有看到与同一数据库相同的内容
答案 0 :(得分:0)
可能是此问题https://www.sqlite.org/src/info/db87229497,它已在版本3.8.6中引入
当IN运算符上有一个子查询时,可能会遇到此错误 右侧和子查询都包含DISTINCT关键字和 LIMIT子句。
在版本3.8.7.2中已修复。
版本3.8.7.1的解决方法是不要在DISTINCT
语句中结合使用LIMIT
和IN
。
不过3.8.7.2是2014年的版本,如果可能的话,您应该真正切换到最新版本。
在此网站https://www.sqlite.org/changes.html上找到了搜索