我在mysql环境中编写了sql代码来连接数据。但是,我无法得到正确的结果,我对我的SQL代码有什么问题感到困惑。我的sql代码如下:
SELECT case when cc.complex_check_id = cmt.comp_o_id then cc.status cstatus,sgk.status sgstatus,cc.NAME complex_check_name,cc.min min_flag,cmt.comp_t_name cmpt_name,group_concat(concat(concat(concat(concat(concat(f.NAME, ';') , sgk.NAME),' ') ,cc.operator),' '))
else cc.status cstatus,sgk.status sgstatus,cc.NAME complex_check_name,cc.min min_flag,'not' as cmpt_name,group_concat(concat(concat(concat(concat(concat(f.NAME, ';') , sgk.NAME),' ') ,cc.operator),' ')) end res_string
FROM complex_check_anag cc,lnksinglechecktocomplexcheck lk,single_check_anag sgk,functionalci f ,lnkconfigurationitemtosinglecheck lkcg,comp_t_anag cmt
WHERE cc.complex_check_id = lk.complex_check_id AND sgk.single_check_id = lk.single_check_id and f.id = lkcg.config_item_id
and sgk.single_check_id = lkcg.single_check_id and sgk.status = 'active' GROUP BY cc.NAME
你能给我一些建议吗?...非常感谢你们所有人!
答案 0 :(得分:1)
select group_concat(concat( case when ProStatus='A' then round(proQnty) else 0 end,':',prodtmappid) separator',') as result from tblproductmapforlisting where
prodtmappid in (329607,329606,329605,329604) order by FIELD(prodtmappid,329607,329606,329605,329604)
答案 1 :(得分:0)
您用于CASE
表达式的语法不正确,您只能在case表达式中选择一个表达式,但是您选择了多个列,我注意到您只需要选择一个列在案例条件上,所以我将所有列移出case表达式,除了像这样的列:
SELECT
cc.status cstatus,
sgk.status sgstatus,
cc.NAME complex_check_name,
cc.min min_flag,
group_concat(concat(concat(concat(concat(concat(f.NAME, ';') , sgk.NAME),' ') ,cc.operator),' ')),
case when cc.complex_check_id = cmt.comp_o_id then cmt.comp_t_name
else 'not' as
end res_string
FROM complex_check_anag cc ....
.... the rest of your query here
此外,您可以使用INNER JOIN
而不是旧的join
语法重写您的查询,如下所示:
SELECT
cc.status cstatus,
sgk.status sgstatus,
cc.NAME complex_check_name,
cc.min min_flag,
group_concat(concat(concat(concat(concat(concat(f.NAME, ';') , sgk.NAME),' ') ,cc.operator),' ')),
case when cc.complex_check_id = cmt.comp_o_id then cmt.comp_t_name
else 'not' as
end res_string
FROM complex_check_anag cc, comp_t_anag cmt
INNER JOIN lnksinglechecktocomplexcheck lk ON cc.complex_check_id = lk.complex_check_id
INNER JOIN functionalci f ON f.id = lkcg.config_item_id
INNER JOIN lnkconfigurationitemtosinglecheck lkcg ON sgk.single_check_id = lk.single_check_id
INNER JOIN single_check_anag sgk ON sgk.single_check_id = lkcg.single_check_id
WHERE sgk.status = 'active'
GROUP BY cc.NAME
请注意,您没有在两个表complex_check_anag cc, comp_t_anag cmt
之间指定任何条件,因此您将在两个表之间获得笛卡尔积,并且可能无法为您提供正确的数据。因此,请检查这两个表之间的关系,并在它们之间添加适当的连接类型,以获取您正在寻找的正确数据。