条件为false时是否执行子查询?

时间:2016-04-13 11:31:24

标签: php mysql subquery

我有这个问题:

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

如您所见,else部分的case .. when部分中存在子查询。现在我想知道,当p.amount is nulltrue时,那个子查询会执行吗?

我问过,因为我可以通过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 = truep.amount is null = false)执行,那么我将进行第二次查询(不{{ 1}})。但是当该条件为case .. when时,子查询才会执行,那么我将使用第一个查询。

那是哪一个?

1 个答案:

答案 0 :(得分:1)

,除非没有其他条件为真,否则不会执行ELSE

CASE EXPRESSION正按照你的顺序逐一评估他的所有条件,所以当满足第一个条件时,案例就会中断。

  
      
  • CASE表达式的计算结果为第一个真实条件。

  •   
  • 如果没有真实条件,则评估为ELSE部分。

  •   
  • 如果没有真实条件且没有ELSE部分,则评估为NULL。

  •