我想选择表格中的所有列,但只给其中一列别名。
我有这张桌子:
id
base
window
thickness
shading
shape
... and many more columns
现在,我想选择带有别名的base
,如下所示:SELECT base AS structure
。
但是我想要选择所有其他字段,而不必全部输入。
我尝试了SELECT *, base AS structure
,但它给了我一个错误。
事实上,这甚至不是我想要的,因为我不希望base
显示出来。
这一切都可能吗?
答案 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;