【问题标题】:SQL - How to avoid multiple OR operators in WHERE clause?SQL - 如何在 WHERE 子句中避免多个 OR 运算符?
【发布时间】:2020-12-03 07:54:20
【问题描述】:
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 运算符用于标点检查...

【问题讨论】:

  • NOT(a OR b OR c) 划分为NOT(a) AND NOT(b) AND NOT(c)。如果条件是您严格显示的条件,请尝试使用NOT REGEXP
  • @Akina Error: no such function: REGEXP sqlite
  • 如果你使用 SQLite 则删除多余的 [mysql] 标签!
  • @Akina 我想知道查询中提到的 sqlite 和 mysql 的语法

标签: mysql sql sqlite


【解决方案1】:

使用 REGEXP 尝试以下操作

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

【讨论】:

  • Error: no such function: REGEXP 在 sqlite 中
【解决方案2】:

对于第一部分(多个 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 2014-10-15
    相关资源
    最近更新 更多