如何将INTERSECT从SQLite转换为MySQL

如何将INTERSECT从SQLite转换为MySQL,mysql,sqlite,Mysql,Sqlite,我写了一个对SQLite的查询,它可以工作,但现在我必须在MySQL中使用它,但我不能转换INTERSECT 查询是: SELECT year FROM Movie,Rating WHERE Movie.mID=Rating.mID AND (stars='4' OR stars='5') INTERSECT SELECT year FROM Movie,Rating WHERE Movie.mID=Rating.mID AND (stars='4' OR stars='5') O

我写了一个对SQLite的查询,它可以工作,但现在我必须在MySQL中使用它,但我不能转换INTERSECT

查询是:

SELECT year FROM Movie,Rating 
WHERE Movie.mID=Rating.mID AND (stars='4' OR stars='5') 

INTERSECT 

SELECT year FROM Movie,Rating WHERE Movie.mID=Rating.mID AND (stars='4' OR stars='5') 

ORDER BY year ASC 

我尝试使用左连接的内部连接,但没有得到正确的结果。我能有一些建议吗?

看起来您只是在使用
INTERSECT
语句删除重复项。有一种简单得多的方法,那就是
选择DISTINCT

SELECT DISTINCT year FROM Movie, Rating
WHERE Movie.mID=Rating.mID AND (stars='4' OR stars='5')
ORDER BY year ASC
如果这不起作用,请尝试直接表达连接,而不是在
WHERE
子句中:

SELECT DISTINCT year
FROM Movie NATURAL JOIN Rating ON mID
WHERE (stars='4' OR stars='5')
ORDER BY year ASC

另外,请确保
stars
的数据类型不是数字,如果是整数而不是字符串,则需要删除
4
5
周围的引号

我错过什么了吗?这两个SELECT语句看起来与我相同,这意味着第二个语句(以及INTERSECT)是多余的。正如我所写的,查询是正确的,因为如果只使用第一个SELECT语句,结果是不正确的。查询是:查找所有电影评级为4或5的年份,并按递增顺序排序。结果为1937-1939-1989-2009。通过我的查询,我得到了正确的结果,但是如果我只使用第一个SELECT语句,我得到的1939-1937-1981-1981-1937-2009是不正确的。好的,但是如果我在MySQL中使用此查询,则列year是空的。我能给你一些在MySQL中翻译的建议吗???在MySQL中没有明显的
的情况下会发生什么?仍然是空的,我认为有必要使用JOIN,但我不知道如何使用它这里绝对不需要JOIN-你从MySQL中得到任何数据吗?我在SQLite和MySQL上插入了相同的表