我有這個疑問:當條件爲false時,是否執行子查詢?
select *,
case when p.amount is null then '1'
else (select count(1)
from Money_paid mp
where mp.post_id = p.id and mp.user_id = :user_id limit 1)
end paid
from Posts p
where p.id = :post_id
正如你看到的,有在case .. when
功能的else
部分子查詢。現在我想知道,當p.amount is null
是true
那麼該子查詢執行?
我問,因爲我可以通過PHP代碼實現一個case .. when
功能,從我的查詢中刪除它,所以我的查詢將是這樣的:
select *,
(select count(1) from Money_paid mp
where mp.post_id = p.id and
mp.user_id = :user_id and
p.amount is not null
limit 1) paid
from Posts p
where p.id = :post_id
// and some php code to implement that condition
總之,如果子查詢針對兩種情況都執行(p.amount is null
= true
和p.amount is null
= false
),那麼我將使用第二個查詢(不包含case .. when
)。但它的子查詢只有執行時,條件是false
,然後我會去第一個查詢。
那麼哪一個?
對不起,但你爲什麼不直接嘗試一下呢? –
@low_rents我怎麼能自己弄清楚? – stack
通過在該位置放置更新或插入查詢。 –