MySQL IF结果计数0返回消息

MySQL IF结果计数0返回消息,mysql,sql,select,Mysql,Sql,Select,我需要以下查询来返回一条消息,例如,如果记录计数为0,则返回“No Result” set @ID_CARTERA = 1; select LEFT(A.F_ANOTRIMESTRE, 4 ) Year, RIGHT(A.F_ANOTRIMESTRE, 2 ) Quarter, ROUND ( A.POR_RENTABILIDAD, 2 ) Quarterly_Yield from dr_rent_carteras_trimestres A where A.ID

我需要以下查询来返回一条消息,例如,如果记录计数为0,则返回“No Result”

set @ID_CARTERA = 1;

select    

LEFT(A.F_ANOTRIMESTRE, 4 ) Year,
RIGHT(A.F_ANOTRIMESTRE, 2 ) Quarter,
ROUND ( A.POR_RENTABILIDAD, 2 ) Quarterly_Yield

from      dr_rent_carteras_trimestres A

where     A.ID_CARTERA = @ID_CARTERA
And       (LEFT(A.F_ANOTRIMESTRE, 4 ) = ( select    MAX(left(F_ANOTRIMESTRE, 4 ) ) - 0
                                         from      dr_rent_carteras_trimestres
                                         where     ID_CARTERA = @ID_CARTERA ) 
            and
            RIGHT(A.F_ANOTRIMESTRE, 2 ) = 12) 

您可以像这样欺骗系统:

  • 生成一个查询以返回COUNT(*)。这将始终返回一行,即使要计数的行为零

  • 将主查询与COUNT(*)查询左键联接。用例语句将结果替换为“无结果”

  • 因此,结果查询将如下所示(假设-主查询只返回零条或一条记录-因此在左JOIN中没有ON子句!!!!):


    同样的事情也可以通过联合来完成。在评论中询问,如果您希望我显示如何

    以及当实际存在与搜索匹配的行时,预期的结果集是什么?这是一个非常奇怪的请求。这似乎是在试图要求数据库执行应用程序级逻辑。预期的结果集是一条记录。我可以看到这将如何工作。如果你现在能让我看到用工会来实现同样的目标,那就太好了。
    set @ID_CARTERA = 1;
    
    select    
    CASE cnt WHEN 0 THEN "No Results" ELSE Year END,
    Quarter,
    Quarterly_Yield
    FROM
    (select count(*) AS cnt
    from      dr_rent_carteras_trimestres A
    where     A.ID_CARTERA = @ID_CARTERA
    And       (LEFT(A.F_ANOTRIMESTRE, 4 ) = ( select    MAX(left(F_ANOTRIMESTRE, 4 ) ) - 0
                                             from      dr_rent_carteras_trimestres
                                             where     ID_CARTERA = @ID_CARTERA ) 
                and
                RIGHT(A.F_ANOTRIMESTRE, 2 ) = 12) ) cnt_tbl
    LEFT JOIN
    ( select    
    LEFT(A.F_ANOTRIMESTRE, 4 ) Year,
    RIGHT(A.F_ANOTRIMESTRE, 2 ) Quarter,
    ROUND ( A.POR_RENTABILIDAD, 2 ) Quarterly_Yield
    from      dr_rent_carteras_trimestres A
    where     A.ID_CARTERA = @ID_CARTERA
    And       (LEFT(A.F_ANOTRIMESTRE, 4 ) = ( select    MAX(left(F_ANOTRIMESTRE, 4 ) ) - 0
                                             from      dr_rent_carteras_trimestres
                                             where     ID_CARTERA = @ID_CARTERA ) 
                and
                RIGHT(A.F_ANOTRIMESTRE, 2 ) = 12) ) main_tbl