簡體   English   中英

mysql WHERE CLAUSE排除基於同一列中兩個不同值的行

[英]mysql WHERE CLAUSE to exclude rows based on two different values in same column

我正在使用MySQL數據比較來比較本地和遠程mysql數據庫。
我正在嘗試建立一個簡單的WHERE子句,該子句從比較中排除包含以下值的任何行:

%mm%transient%

我使用的WHERE子句似乎不起作用。

'option_name' NOT LIKE '%_transient_%' OR '%mm%'

正在運行的完整查詢是:

SELECT 'option_id', 'option_name', 'option_value', 'autoload' 
FROM 'wp_options WHERE 'option_name' NOT LIKE '%_transient_%' OR '%mm%' 

並且結果輸出不排除option_name列中具有mm_transient_的行。

需要注意的是,我僅限於使用WHERE子句,而且我無法編輯導致該子句的SELECT子句(因為這都是由軟件生成的)。

沒有可以將LIKE與多種模式進行比較的形式。

正如@vkp在評論中提到的(我不知道他們為什么不發布答案),您的條件無法滿足您的期望:

WHERE option_name NOT LIKE '%_transient_%' OR '%mm%' 

在MySQL中這不是語法錯誤,因為OR可以使用任何表達式作為操作數。 零值算作false,非零值算作true。 因此,您的條件等同於:

WHERE (option_name NOT LIKE '%_transient_%') OR ('%mm%')

在邏輯上等效於:

WHERE (option_name NOT LIKE '%_transient_%') OR (true)

這對每一行都是真實的,因為將真實值OR與任何其他表達式一起將得出true。

您的條件應為:

WHERE option_name NOT LIKE '%_transient_%' AND option_name NOT LIKE '%mm%'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM