【问题标题】:Mysql If else in Where clauseMysql If else 在 Where 子句中
【发布时间】:2020-12-13 05:38:16
【问题描述】:
SELECT * FROM table WHERE field1 ="abc" AND field2="xyz"

如果此查询返回 0 行,那么我必须在 where 子句中减少过滤条件 如SELECT * FROM table WHERE field1 ="abc"(需要从Where子句中删除一个字段)

我可以在 where 子句中处理这种情况,即

SELECT * 
  FROM table 
 WHERE CASE WHEN((SELECT COUNT(*) FROM table WHERE field1 ="abc" AND field2="xyz" )>0)
THEN field1 ="abc" AND field2="xyz"
ELSE field1 ="abc" END

但我希望使用 IF ELSE 语句(或任何其他更好的选项而不是 case 语句)来完成此操作

【问题讨论】:

  • 'BUT I WANT I WANT THIS TO DONE WITH IF ELSE STATEMENT' - 这些语句不能仅在 mysql 中的存储程序中可用。甚至不在选择的上下文中

标签: mysql sql node.js performance


【解决方案1】:

如果您只期望一行,那么一个简单的方法是:

SELECT t.*
FROM table t
WHERE t.field1 = 'abc' 
ORDER BY ( field2 = 'xyz' ) DESC
LIMIT 1;

如果可能不止一行,那么:

SELECT t.*
FROM table t
WHERE field1 = 'abc' AND
      (field2 = 'xyz' OR
       NOT EXISTS (SELECT 1 FROM table t2 WHERE t2.field1 = t.field1 AND t2.field2 = 'xyz')
      );

【讨论】:

  • 第一个将受益于INDEX(field1, field2),按此顺序。
猜你喜欢
  • 2013-03-18
  • 2016-03-20
  • 1970-01-01
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
相关资源
最近更新 更多