Mysql 中 OR 和 AND 優先順序問題

2021-10-23 00:24:00 字數 3015 閱讀 3452

問題描述:

查詢keyword,product_describe,product_name屬性裡面包含關鍵字,並且product_kind = 1,product_status = 2 , jg.is_delete = 0的所有記錄

一開始沒有新增查詢列product_kind,product_status,咦....? 發現is_delete查詢結果不正確,is_delete = 0 這個條件好像沒有起作用

select jg.id as goodsid,product_name as goodsname,jm.name as merchantname,product_status,

jg.product_kind,jg.store_id,jg.is_delete

from jdy_goods jg

left outer join jdy_merchant jm on jg.store_id = jm.id

where jg.product_kind = 1 and jg.is_delete = 0

and keyword like '%水果%' or product_describe like '%水果%'

or product_name like '%水果%' and jg.product_status = 2

執行結果:

把is_delete= 0這個條件放在後面,哎.....? 好像起作用了

可怕的但是,劇情反轉,當我把product_kind,product_status查詢字段加上後,結果又出現了問題

select jg.id as goodsid,product_name as goodsname,jm.name as merchantname,product_status,

jg.product_kind,jg.store_id,jg.is_delete

from jdy_goods jg

left outer join jdy_merchant jm on jg.store_id = jm.id

where jg.product_kind = 1

and keyword like '%水果%' or product_describe like '%水果%'

or product_name like '%水果%' and jg.product_status = 2 and jg.is_delete = 0

執行結果:

我猜測應該是三個模糊查詢的問題,試著把三個狀態條件放在後面,what? 還是一樣有問題

select jg.id as goodsid,product_name as goodsname,jm.name as merchantname,product_status,jg.product_kind,jg.store_id,jg.is_deletefrom jdy_goods jgleft outer join jdy_merchant jm on jg.store_id = jm.idwhere keyword like '%水果%' or product_describe like '%水果%'or product_name like '%水果%' and jg.product_status = 2 and jg.product_kind = 1 and jg.is_delete = 0
執行結果:

谷歌之後才發現是or 和 and 的優先順序問題。優先順序and > or

所以sql會先執行and條件再執行or條件,就出現了查詢資料與預期不一致問題,若提高or的優先順序可以把or條件用()括起來,如下面寫法:

彷彿回到了小學時代的算術運算,哈哈

一:

select jg.id as goodsid,product_name as goodsname,jm.name as merchantname,product_status,

jg.product_kind,jg.store_id,jg.is_delete

from jdy_goods jg

left outer join jdy_merchant jm on jg.store_id = jm.id

where (keyword like '%水果%' or product_describe like '%水果%'

or product_name like '%水果%') and jg.product_kind = 1

and jg.product_status = 2 and jg.is_delete = 0

二:select jg.id as goodsid,product_name as goodsname,jm.name as merchantname,product_status,

jg.product_kind,jg.store_id,jg.is_delete

from jdy_goods jg

left outer join jdy_merchant jm on jg.store_id = jm.id

where jg.product_kind = 1 and jg.product_status = 2 and jg.is_delete = 0

and (keyword like '%水果%' or product_describe like '%水果%'

or product_name like '%水果%')

正確查詢結果:

Linux程序優先順序和調整優先順序

linux 是乙個多使用者 多工的作業系統,系統中通常執行著非常多的程序。但是 cpu 在乙個時鐘週期內只能運算一條指令 現在的 cpu 採用了多執行緒 多核心技術,所以在乙個時鐘週期內可以運算多條指令。但是同時運算的指令數也遠遠小於系統中的程序總數 那問題來了 誰應該先運算,誰應該後運算呢?這就需...

sql中and和or的優先順序

首先and的優先順序大於or,通俗理解其實or查詢其實會把條件分為左右兩邊來查。如 select from user where id 1 and status 2 or status 3,本來是想查詢user表中id為1的狀態為2或者3的資料,其實只會這樣執行,and比or優先,結果是查詢id為1...

python優先順序佇列 python 優先順序佇列

簡介 優先順序佇列是基於堆的,關於堆的時候可以參考文章堆,優先順序佇列就是入隊時,會分配乙個優先順序,之後出隊時,根據優先順序出列。如,入隊時 4,a 6,r 3 d 則出隊順序 6,r 4,a 3 d 優先順序佇列的python實現 class priorityqueue object def i...