我目前在 case 中使用多个 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 - Combining multiple WHEN conditions in CASE
How to write a MYSQL CASE WHEN statement with multiple search conditions?
但这并没有解决我的问题。
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
子句中的子查询不能采用列(或表)别名。- 子查询返回多个列。即使子查询中的所有表只有一列,
*
也会返回多个列。
除了语法之外,这个查询完全不可读。我建议您提出另一个问题,提供表格布局、示例数据和所需的结果。有人可能会找到更好的方法来编写您尝试过的查询。
关于mysql - MySQL 中联接内的多个 When 情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23586286/