MySQL连接中的多个When情况



我目前有一个问题,当成的情况下多个。当我在时删除第二个时,它工作了。有什么问题吗?

报告的MYSQL错误是:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as param2 on param2.param_micro_site=i1.i_micro_site else null END )' at line 1

我尝试了这些建议:

MySQL -在CASE

中合并多个WHEN条件

如何写一个MYSQL CASE WHEN语句与多个搜索条件?

但这并没有解决我的问题。

SELECT * FROM items i1
join param on 
(
case 
    when (ITEM_ID=param_item_id and i_status=1 and item_page=164) 
    then param_item_id=ITEM_ID 
    when (i_micro_site>=1 and i_status=7 and (EXISTS(select * from multiple where multiple_id=ITEM_ID and multiple_cat=21 and multiple_enum="item") || item_page=169)) 
    then (SELECT * from items i2 join pages on i2.item_page=p_ID and p_cat in (21,29,0) join param where param_micro_site=i1.i_micro_site and param_item_id in(i1.ITEM_ID,i2.ITEM_ID)) as param2 on param2.param_micro_site=i1.i_micro_site 
else null END 
)

谢谢

下面是一个尝试以一种稍微可读的方式格式化你的查询:

SELECT *
FROM items i1 join
     param
     on (case when (ITEM_ID=param_item_id and i_status=1 and item_page=164) 
              then param_item_id=ITEM_ID 
              when (i_micro_site>=1 and i_status=7 and
                    (EXISTS(select *
                            from multiple
                            where multiple_id=ITEM_ID and multiple_cat=21 and multiple_enum="item"
                           ) || item_page=169
                    )
                   ) 
              then (SELECT *
                    from items i2 join
                         pages on i2.item_page=p_ID and p_cat in (21,29,0) join
                         param
                    where param_micro_site=i1.i_micro_site and
                          param_item_id in(i1.ITEM_ID,i2.ITEM_ID)
                   ) as param2
on param2.param_micro_site=i1.i_micro_site 
else null END 
)

以下是param2之后on的观测值:

  • then子句查询完成。
  • then子句中的子查询不能使用列(或表)别名。
  • 子查询返回多个列。即使子查询中的所有表只有一列,*也会带回不止一列。

除了语法之外,这个查询完全不可读。我建议您问另一个问题,提供表格布局、示例数据和期望的结果。有人可能会想出一个更好的方法来编写您所尝试的查询。

最新更新