有没有其他方法在Sql中使用Alias?

问题描述 投票:1回答:2

我正在进行相邻的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的另一种方法是什么?

mysql sql
2个回答
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 

当你使用FROM(子查询)时需要一个my_table_alias,这是由select ,,, FROM(子查询)my_table_alias sintax引入的。

表的别名为FROM(子查询)强制如果要引用来自查询外部的FROM(子查询)的列


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子句中的表或子查询。

© www.soinside.com 2019 - 2024. All rights reserved.