MySQL使用CASE连接4个表

MySQL使用CASE连接4个表,mysql,join,case,Mysql,Join,Case,如果您能帮助我开发一个连接4个表但也包含多个CASE语句的查询结构,我将不胜感激 我正在尝试生成一个SELECT语句,可用于客户端网站上的快速查看报告,该语句正在从成员目录中提取,并将根据我输入的值显示自定义配置文件字段的值 这是我的数据库结构净化摘录 这是我完全不起作用的问题 这就是我得到的: 这就是我想要的: 请注意,查询中还需要更新列名,以便将结果导出到具有唯一列标题的CSV,而不是值、值、值等 有什么建议吗?我不声称自己是一名开发人员,所以我非常感谢能得到的任何帮助! 谢谢:使用子查询的

如果您能帮助我开发一个连接4个表但也包含多个CASE语句的查询结构,我将不胜感激

我正在尝试生成一个SELECT语句,可用于客户端网站上的快速查看报告,该语句正在从成员目录中提取,并将根据我输入的值显示自定义配置文件字段的值

这是我的数据库结构净化摘录

这是我完全不起作用的问题

这就是我得到的:

这就是我想要的:

请注意,查询中还需要更新列名,以便将结果导出到具有唯一列标题的CSV,而不是值、值、值等

有什么建议吗?我不声称自己是一名开发人员,所以我非常感谢能得到的任何帮助!
谢谢:

使用子查询的可能解决方案:

select 
    c.cat_name,
    l.link_name,
    (select value from cfvalues cfv where cfv.link_id=l.link_id and cfv.cf_id=54) as name,
    (select value from cfvalues cfv where cfv.link_id=l.link_id and cfv.cf_id=55) as custom
from 
    cats c
    INNER JOIN catlink cl ON c.cat_id = cl.cat_id
    INNER JOIN links l ON l.link_id = cl.link_id 
使用if语句的备选方案:

select 
    c.cat_name,
    l.link_name,
    max(if(cfv.cf_id=54, cfv.value, '')) as name,
    max(if(cfv.cf_id=55, cfv.value, ''))  as custom
from 
    cats c
    INNER JOIN catlink cl ON c.cat_id = cl.cat_id
    INNER JOIN links l ON l.link_id = cl.link_id 
    INNER JOIN cfvalues cfv ON cfv.link_id = l.link_id
group by c.cat_id, l.link_id
备选用例:

select 
    c.cat_name,
    l.link_name,
    max(case cfv.cf_id when 54 then cfv.value else '' end) as name,
    max(case cfv.cf_id when 55 then cfv.value else '' end)  as custom
from 
    cats c
    INNER JOIN catlink cl ON c.cat_id = cl.cat_id
    INNER JOIN links l ON l.link_id = cl.link_id 
    INNER JOIN cfvalues cfv ON cfv.link_id = l.link_id
group by c.cat_id, l.link_id

哇!感谢您提供了3种不同的选择!最后一个用例正是我所需要的,但将保留其他用例以供参考!再次感谢!你能检查一下我答案旁边的绿色复选标记吗?很高兴我能帮忙!
| CAT_NAME |  LINK_NAME |            NAME |                  CUSTOM |
|----------|------------|-----------------|-------------------------|
|   ClassA |   Link One |   Link One name |   Link One custom value |
|   ClassB |   Link Two |   Link Two name |   Link Two custom value |
|   ClassC | Link Three | Link Three name | Link Three custom value |
|   ClassD |  Link Four |  Link Four name |  Link Four custom value |
|   ClassE |  Link Five |  Link Five name |  Link Five custom value |
|   ClassF |   Link Six |   Link Six name |   Link Six custom value |
select 
    c.cat_name,
    l.link_name,
    (select value from cfvalues cfv where cfv.link_id=l.link_id and cfv.cf_id=54) as name,
    (select value from cfvalues cfv where cfv.link_id=l.link_id and cfv.cf_id=55) as custom
from 
    cats c
    INNER JOIN catlink cl ON c.cat_id = cl.cat_id
    INNER JOIN links l ON l.link_id = cl.link_id 
select 
    c.cat_name,
    l.link_name,
    max(if(cfv.cf_id=54, cfv.value, '')) as name,
    max(if(cfv.cf_id=55, cfv.value, ''))  as custom
from 
    cats c
    INNER JOIN catlink cl ON c.cat_id = cl.cat_id
    INNER JOIN links l ON l.link_id = cl.link_id 
    INNER JOIN cfvalues cfv ON cfv.link_id = l.link_id
group by c.cat_id, l.link_id
select 
    c.cat_name,
    l.link_name,
    max(case cfv.cf_id when 54 then cfv.value else '' end) as name,
    max(case cfv.cf_id when 55 then cfv.value else '' end)  as custom
from 
    cats c
    INNER JOIN catlink cl ON c.cat_id = cl.cat_id
    INNER JOIN links l ON l.link_id = cl.link_id 
    INNER JOIN cfvalues cfv ON cfv.link_id = l.link_id
group by c.cat_id, l.link_id