如何将INTERSECT从SQLite转换为MySQL
我写了一个对SQLite的查询,它可以工作,但现在我必须在MySQL中使用它,但我不能转换INTERSECT 查询是:如何将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
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上插入了相同的表