【问题标题】:select query with if使用 if 选择查询
【发布时间】:2012-09-03 19:24:40
【问题描述】:

我有一个列:account_type,其中包含四个字符。 dhva。现在,如果 account_type 是d,那么它应该显示DBA,如果a,那么application,如果v,那么vendor,如果h,那么human。我试过这个查询。

SELECT da.account_name, da.account_id,da.manager_lastname, da.manager_firstname, 
dap.live_password_change, dap.dev_password_change, das.status_desc, 
REPLACE(RTRIM(CONCAT(IF(da.account_type = 'd', 'DBAs', 'NO'))), ' ', ', ')
FROM dba_account da
LEFT JOIN dba_account_password dap ON da.account_id = dap.account_id
LEFT JOIN dba_account_status das ON da.status = das.status_id
WHERE CAST(da.account_name AS BINARY) RLIKE '[a-z]'
AND da.account_name NOT RLIKE '[#$\\\\////]'
ORDER BY da.account_name

但我不知道如何比较 4 个条件。请问有什么建议吗?

【问题讨论】:

    标签: mysql select if-statement


    【解决方案1】:

    你可以使用类似这样的CASE

        SELECT da.account_name, da.account_id,da.manager_lastname, da.manager_firstname, 
    dap.live_password_change, dap.dev_password_change, das.status_desc, 
    CASE da.account_type 
        WHEN 'd' THEN 'DBAs'
        WHEN 'a' THEN 'application'
        WHEN 'v' THEN 'vendor'
        WHEN 'h' then 'human' 
        ELSE 'NO' END as 'account_type'
    FROM dba_account da
    LEFT JOIN dba_account_password dap ON da.account_id = dap.account_id
    LEFT JOIN dba_account_status das ON da.status = das.status_id
    WHERE CAST(da.account_name AS BINARY) RLIKE '[a-z]'
    AND da.account_name NOT RLIKE '[#$\\\\////]'
    ORDER BY da.account_name
    

    【讨论】:

    • 它说:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ')、''、'、') FROM dba_account da LEFT JOIN dba_account_password dap ON da.accou' 附近使用正确的语法
    • @ashah142 看看我的编辑,试试不带REPLACE(RTRIM(CONCAT(
    【解决方案2】:

    试试CASE statement。它在许多语言中都像 switch 一样工作。

    【讨论】:

    • 嘿,我尝试使用大小写,但它显示语法错误。有什么办法可以给我一个可以效仿的例子吗?谢谢
    【解决方案3】:

    您可以在 SQL 中使用 case 语句,您的查询将被重写如下:

    SELECT 
        da.account_name, da.account_id,da.manager_lastname, da.manager_firstname, 
        dap.live_password_change, dap.dev_password_change, das.status_desc, 
        CASE da.account_type\
            WHEN 'd' THEN 'DBAs'
            WHEN 'v' THEN 'vendor'
            WHEN 'h' THEN 'human'
            ELSE 'unknown'
        END
    FROM 
        dba_account da LEFT JOIN 
            dba_account_password dap ON da.account_id = dap.account_id 
    LEFT JOIN 
        dba_account_status das ON da.status = das.status_id 
    WHERE 
        CAST(da.account_name AS  BINARY) RLIKE '[a-z]' 
        AND da.account_name NOT RLIKE '[#$\\\\////]' 
    ORDER BY 
        da.account_name;
    

    有关 MySQL 5.6 中 case 语句的更多信息,您可以访问此处: http://dev.mysql.com/doc/refman/5.6/en/control-flow-functions.html

    【讨论】:

      猜你喜欢
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2019-01-16
      • 2015-05-21
      相关资源
      最近更新 更多