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