简体   繁体   English

如何避免 MySQL 中 where 子句中的语句重复?

[英]How to avoid statement duplication in where clause in MySQL?

Is there any way to use an alias as a substitute of a single result query in WHERE clause to avoid statement duplication in the following query?有没有办法在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;

Is it possible to modify that query to avoid the statement duplication.是否可以修改该查询以避免语句重复。 Ie something like that?即类似的东西?

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;

You can use COALESCE() :您可以使用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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM