还有其他在Sql中使用Alias的方法吗?

时间:2019-02-26 06:47:22

标签: mysql sql

我正在处理相邻的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中使用别名的另一种方法吗?

2 个答案:

答案 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绝对不是解决此问题的正确方法。

请注意,stmp的作用相同。这是一个表别名,用于在from子句中命名一个表或子查询。