如果声明时无法放置子查询条件

时间:2019-11-13 04:42:54

标签: mysql sql

我有一张表seat,需要根据给定条件打印一些数据。由于无法描述的语法错误,我无法执行查询,也无法推断出其背后的原因。

这是我的查询,生成语法错误:

select (case id when mod(id, 2)=0 then id=id+1 
                when mod(id,2) <> 0 and id != (select count(*) from seat) then id=id-1 
                else id=id) as id, 
       student 
from seat;

错误是:

  

您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第2行的')用作id,学生从座位'附近使用

任务是切换相邻行的(特定列的)值。完整的问题可用here

1 个答案:

答案 0 :(得分:1)

您无需在CASE表达式中的值中指定输出变量。另外,在CASE条件下使用逻辑表达式时,您不应该指定WHEN的输入,并且END缺少CASE。尝试以下方法:

select case when mod(id, 2) =  0 then id-1 
            when mod(id, 2) <> 0 and id != (select count(*) from seat) then id+1
            else id
       end as id, 
       student 
from seat
order by id;

输出(针对leetcode问题)

id  student
1   Doris
2   Abbot
3   Green
4   Emerson
5   Jeames

Demo on dbfiddle