【问题标题】:MySql case condition in where clausewhere子句中的MySql案例条件
【发布时间】:2019-07-16 07:33:06
【问题描述】:

这是我的桌子

我的查询是当我使用 cubbersId 搜索时,如果我得到空数据 where cubbersId = 0 否则 where cubbersId = 1 (my_search_data) 它类似于存储过程。

我试过这个查询

SELECT * FROM hometestimonial WHERE (CASE 
    WHEN cubbersId IS NOT NULL THEN cubbersId = 1
    ELSE cubbersId = 0
END)

我搜索cubbersId = 1,所以我得到了3 datas。但是我尝试在 cubbersId 2 中搜索 cubbersId = 2 表示 no data,所以在这种情况下我需要显示 cubbersId = 0 数据。

这是我的结果:

where cubbersId = 1数据:

where cubbersId = 2 数据:

【问题讨论】:

    标签: jquery mysql sql select case


    【解决方案1】:

    您可以使用 UNION ALL 做到这一点。
    仅当第一个为空时,第二个查询才会返回行:

    SELECT * FROM hometestimonial
    WHERE cubbersId = 2
    UNION ALL
    SELECT * FROM hometestimonial
    WHERE cubbersId = 0 AND 
    NOT EXISTS (
      SELECT 1 FROM hometestimonial
      WHERE cubbersId = 2
    )
    

    【讨论】:

      【解决方案2】:

      如果你想要结果,你应该在选择中移动案例

          SELECT *,  CASE 
              WHEN cubbersId IS NOT NULL THEN  1
              ELSE  0
          END my_cubbersId
          FROM hometestimonial 
      

      【讨论】:

      • 谢谢你的回答兄弟这里my_cubbersId是什么@
      • 是一个列别名,用于避免与 select * 返回的 cubbersID 发生名称冲突
      • 其实兄弟我期待像@forpas 回答一样。谢谢你的支持兄弟。'
      【解决方案3】:

      这是另一种选择:

      SELECT ht.*
      FROM hometestimonial ht
      WHERE ht.cubbersId = (SELECT MAX(h2.cubbersID)
                            FROM hometestimonial ht2
                            WHERE cubbersID IN (0, 2)
                           );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-16
        • 1970-01-01
        • 2013-08-29
        • 2011-01-12
        • 2021-11-07
        • 2013-07-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多