内部选择语句的不同结果

时间:2019-01-14 07:08:59

标签: sqlite

此查询给了我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中没有看到与同一数据库相同的内容

1 个答案:

答案 0 :(得分:0)

可能是此问题https://www.sqlite.org/src/info/db87229497,它已在版本3.8.6中引入

  

当IN运算符上有一个子查询时,可能会遇到此错误   右侧和子查询都包含DISTINCT关键字和   LIMIT子句。

在版本3.8.7.2中已修复。

版本3.8.7.1的解决方法是不要在DISTINCT语句中结合使用LIMITIN

不过3.8.7.2是2014年的版本,如果可能的话,您应该真正切换到最新版本。

在此网站https://www.sqlite.org/changes.html上找到了搜索