MySQL仅选择带有AS别名的1个字段

时间:2011-08-02 01:36:01

标签: mysql sql select alias

我想选择表格中的所有列,但只给其中一列别名。

我有这张桌子:

id
base
window
thickness
shading
shape
... and many more columns

现在,我想选择带有别名的base,如下所示:SELECT base AS structure。 但是我想要选择所有其他字段,而不必全部输入。

我尝试了SELECT *, base AS structure,但它给了我一个错误。

事实上,这甚至不是我想要的,因为我不希望base显示出来。

这一切都可能吗?

7 个答案:

答案 0 :(得分:10)

不,不是。把它拿出来然后全部输入:)

答案 1 :(得分:4)

没有

您可以列出您想要的内容,也可以通过撰写*来说明“全部”。

这些是您可以使用的两种选择。

懒惰:开始! (而且,让我们面对现实,如果你真的需要这个别名,那么你的领域可能首先被命名为错误......)


最终,你可以创建一个VIEW来透明地完成这项工作,但是你必须不断更新它ALTER原始表。


我试图避免引起你的注意,但是this answer确实证明了一种不可思议的方式:

SET @sql = CONCAT('SELECT ', (SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), '<columns_to_exclude>,', '') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '<table>' AND TABLE_SCHEMA = '<database>'), ' FROM <table>');

PREPARE stmt1 FROM @sql;
EXECUTE stmt1;

(取代<table><database><columns_to_exclude>)。

我希望重复一遍:不要。如果你不得不这样做,那就错了。

答案 2 :(得分:2)

也许有更好的方法来解决你的问题,如果你不是太懒,至少以下答案适合你:

SELECT id,基础AS结构,窗口,厚度,阴影,形状......来自你的表

答案 3 :(得分:2)

据我所知(以及经过MySQL documentation确认的检查),除了一个之外,不可能列出原始名称的所有列,至少使用*。

答案 4 :(得分:2)

如果您不介意使用旧名称,可以执行以下操作:

SELECT MyTable。*,MyTable.base AS结构

答案 5 :(得分:1)

效率低但干净,请尝试将相同的行连接到自己,然后从左侧选择以新名称连接所需的列。

SELECT table_1.*, table_2.base AS structure 
SELECT 
    table_1.*, 
    table_2.base AS structure 
FROM 
    table1 AS table_1 
        LEFT JOIN table2 AS table_2 
            ON table_1.id=table_2.id

答案 6 :(得分:0)

查询:

SELECT firstName AS firstStudent FROM student LIMIT 1;