簡體   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