mysql - 如何避免 MySQL 中 where 子句中的语句重复?
问题描述
有没有办法在子句中使用别名代替单个结果查询WHERE
来避免以下查询中的语句重复?
SELECT *
FROM (
SELECT *
FROM SomeTable T
WHERE created <= (CASE WHEN
(SELECT created
FROM SomeTable
WHERE sales > 0
ORDER BY created DESC
LIMIT 1)
IS NULL THEN NOW() ELSE
(SELECT created
FROM SomeTable
WHERE sales > 0
ORDER BY created DESC
LIMIT 1)
END)
ORDER BY created DESC LIMIT 10
) as inverseOrder
ORDER BY created ASC;
是否可以修改该查询以避免语句重复。即类似的东西?
SELECT *
FROM (
SELECT *
FROM SomeTable T
WHERE created <= someAliasssssssss
IS NULL THEN NOW() ELSE someAliasssssssss
ORDER BY created DESC LIMIT 10
) as inverseOrder
ORDER BY created ASC;
解决方案
您可以使用COALESCE()
:
SELECT *
FROM (
SELECT *
FROM SomeTable T
WHERE created <= COALESCE(
(SELECT created
FROM SomeTable
WHERE sales > 0
ORDER BY created DESC
LIMIT 1), NOW())
ORDER BY created DESC LIMIT 10
) as inverseOrder
ORDER BY created ASC;
推荐阅读
- r - 如何在 R 中优化以下程序以提高性能?(涉及计算密集型置换测试的蒙特卡罗模拟)
- node.js - 如何执行 30k 连续 API 调用(节点)[错误:连接 ECONNRESET]
- python-3.x - 如何使不同模型的字段在 django 中独一无二
- java - 来自 logcat 控制台的未知错误
- python-3.x - SymPy:如何同时定义上标和下标
- typescript - VeeValidate 4 验证没有提交按钮
- reactjs - 如何使用 Formik 从 Material UI Select Fields 中获取值
- azure-devops - 在 Azure Devops Pipeline 期间使用 .NET 5 创建通用包
- c++ - 在 C++ 中通过引用返回值
- azure - 事件中心的入站 IP 是什么?