我正在处理相邻的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中使用别名的另一种方法吗?
答案 0 :(得分:1)
在示例中,在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
这是由select ,,, FROM(subquery)my_table_alias sintax引入的 当您使用FROM(子查询)时,您需要一个my_table_alias ..
强制性的FROM(子查询)的表别名如果要引用查询外部的FROM(子查询)的列
答案 1 :(得分:1)
您可以只使用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子句中命名一个表或子查询。