我正在进行相邻的id交换问题。我找到了一个解决方案,部分工作。
SELECT tmp.id, tmp.student FROM
(
SELECT id-1 AS id, student FROM seat WHERE id%2 = 0 -- even id -1
UNION
SELECT id+1 AS id, student FROM seat WHERE id%2 = 1 -- odd id +1
) tmp
ORDER BY tmp.id
我知道基本的想法,但仍然混淆语法或表达。我想知道tmp来自哪里?在SQL中使用Alias的另一种方法是什么?
在示例中,my_table_alias中的tmp别名已更改
SELECT my_table_alias.id, my_table_alias.student FROM
(
SELECT id-1 AS id, student FROM seat WHERE id%2 = 0 -- even id -1
UNION
SELECT id+1 AS id, student FROM seat WHERE id%2 = 1 -- odd id +1
) my_table_alias
ORDER BY my_table_alias.id
当你使用FROM(子查询)时需要一个my_table_alias,这是由select ,,, FROM(子查询)my_table_alias sintax引入的。
表的别名为FROM(子查询)强制如果要引用来自查询外部的FROM(子查询)的列
你可以使用case
表达式:
SELECT (CASE WHEN s.id % 2 = 0 THEN s.id - 1 ELSE s.id + 1
END) AS id,
s.student
FROM seat s;
UNION
绝对不是解决这个问题的正确方法。
请注意,s
在您的问题中扮演与tmp
相同的角色。它是一个表别名,用于命名from子句中的表或子查询。