问题描述
编写一个 sql 语句,显示电影表中电影的所有列。 仅显示标题不包含以下任何字母的电影:A E R T(任何情况)
我尝试将查询编写为
SELECT '103040698' as StudID,MovieNo,Title,RelYear,RunTime,ratingCode,ColourCode,TMDB_score,TMDB_Votes,IMDB_ID
FROM Movie0698
WHERE NOT Title LIKE '%A%'
(or NOT Title LIKE '%E%')
(or NOT Title LIKE '%r%')
(or NOT Title LIKE '%T%')
甚至
SELECT '103040698' as StudID,IMDB_ID
FROM Movie0698
WHERE NOT Title LIKE ('%[aA][eE][rR][tT]%')
甚至
SELECT '103040698' as StudID,IMDB_ID
FROM Movie0698
WHERE (NOT Title LIKE '%a%' AND NOT Title LIKE '%A%')
OR (NOT Title LIKE '%e%' AND NOT Title LIKE '%E%')
OR (NOT Title LIKE '%r%' AND NOT Title LIKE '%r%')
OR (NOT Title LIKE '%t%' AND NOT Title LIKE '%T%')
ORDER BY Title DESC;
但无论哪种方式,我仍然会得到标题中包含大写或小写字母之一的电影的结果
顺便说一下,我使用的是 sqljunior,我认为它区分大小写
解决方法
您需要逻辑与,而不是逻辑或。使用 OR 时,满足其中一个条件就足够了,但对于同一记录,您需要同时满足所有条件。
所以:
WHERE UPPER(Title) NOT LIKE '%A%'
AND UPPER(Title) NOT LIKE '%E%'
AND UPPER(Title) NOT LIKE '%R%'
AND UPPER(Title) NOT LIKE '%T%'
用于大写字符串的实际语法取决于您使用的数据库引擎。因此,将 UPPER
替换为您的数据库支持的内容。
您似乎在使用 SQL Server,在这种情况下,您可以在 WHERE
子句中使用单个条件并增强 LIKE
:
SELECT '103040698' AS StudID,MovieNo,Title,RelYear,RunTime,RatingCode,ColourCode,TMDB_Score,TMDB_Votes,IMDB_ID
FROM Movie0698
WHERE Title NOT LIKE ('%[aAeErRtT]%');
根据您的数据库,还有其他类似的方法。例如,在 MySQL 上,您可以使用:
WHERE Title NOT REGEXP '[aAeErRtT]'
如果这些都不可用,那么您将不得不使用@Trincot 答案中的方法。