繁体   English   中英

SQL - 如何在 WHERE 子句中避免多个 OR 运算符?

[英]SQL - How to avoid multiple OR operators in WHERE clause?

sqlite> .schema movie
CREATE TABLE movie (
  id INTEGER PRIMARY KEY, title TEXT, year INTEGER, nth TEXT, for_video BOOLEAN
  );
sqlite>
sqlite>
sqlite>

对于这个问题:

哪些电影(不包括标题以标点符号开头的电影)按字母顺序排在第一位,哪些排在最后?

下面的语法:

SELECT title 
FROM movie 
WHERE NOT(title LIKE '%!%' or title LIKE '%#%' or title LIKE '%$%')  
ORDER BY title ASC LIMIT 1;

有永无止境的或运营商。


语法应适用于 mysql 和 sqlite

如何避免检查标点符号的多个OR运算符? 尚未添加更多OR运算符用于标点检查...

对于第一部分(多个 OR)。 另请注意,连接的语法不同( Like

您可以为标点符号创建一个表格并将数据添加到其中

 Create table Punctuations (punckSign varchar(10))

 insert into Punctuations
 values ('!'), ('#'), ('$')

然后将其与电影表左连接,如下所示

MySQL

 SELECT title FROM movie m
 Left join Punctuations p 
 on  title  like concat('%',p.punckSign,'%')  
 where p.punckSign is null

SQLite

 SELECT title FROM movie m
 Left join Punctuations p 
 on  title  like '%'|| p.punckSign || '%'  
 where p.punckSign is null

使用 REGEXP 尝试以下操作

SELECT title 
FROM movie 
WHERE title not REGEXP '!|#|$'
ORDER BY title ASC LIMIT 1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM