Mysql 选择使用if查询

Mysql 选择使用if查询,mysql,select,if-statement,Mysql,Select,If Statement,我有一个列:account\u type,它包含四个字符d,h,v,a。现在,如果帐户类型是d,那么它应该显示DBA,如果a那么应用程序,如果v那么供应商,如果h那么人。我试过这个问题 SELECT da.account_name, da.account_id,da.manager_lastname, da.manager_firstname, dap.live_password_change, dap.dev_password_change, das.status_desc, REPLAC

我有一个列:account\u type,它包含四个字符<代码>d,
h
v
a
。现在,如果帐户类型是
d
,那么它应该显示
DBA
,如果
a
那么
应用程序
,如果
v
那么
供应商
,如果
h
那么
。我试过这个问题

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种情况。有什么建议吗?

试试看。在许多语言中,它都像开关一样工作。

试试看。在许多语言中,它的工作原理类似于开关。

您可以使用类似于以下内容的案例:

    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

您将使用与此类似的
案例

    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中使用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语句的更多信息,请访问:

您可以在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语句的更多信息,请访问:

嘿,我试过使用case,但它显示语法错误。你能给我举个例子吗?谢天谢地,我试过使用case,但它说语法错误。你能给我举个例子吗?thanksit说:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解要使用的正确语法(从dba_account da左侧加入dba_account_密码dap ON da.accou,在第行)1@ashah142查看我的编辑,在不使用
REPLACE(RTRIM(CONCAT))的情况下进行尝试(
Abround It说:您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以获得可在附近使用的正确语法“,”,”),从dba_帐户da左加入dba_帐户\密码dap在da.accou行1@ashah142查看我的编辑,在不使用替换(RTRIM)(CONCAT()的情况下进行尝试