SQL根据列的位置选择。可能吗?

时间:2013-07-07 11:45:06

标签: mysql sql select

我有一个mySQL数据库,我想知道我是否可以选择列,而不是按名称选择列,而是选择它们在表中的位置。
我们认为我有一个表(混合英语和法语数据),其中包含以下列:

id
en_name
en_phone
en_address
fr_name
fr_phone
fr_address

但这只是为了演示目的,我的真正的桌子有20个英文和20个法国专栏 是否可以选择所有英语或所有法语列而不在SELECT中列出其姓名? 如果这是不可能的,最佳做法是什么?

2 个答案:

答案 0 :(得分:6)

使用标准SQL,答案是否定的。没有像

这样的结构
select fr_*

获取以fr_开头的所有列。

您可以使用动态SQL(预准备语句)生成所需的SQL。您可以使用视图仅选择英语或法语列。您可以存储数据,以便列位于不同的行上,并且您具有用于选择的语言标识符。在某些数据库中,您可以使用存储过程仅返回所需的列。

但是,仅使用SQL查询,您就没有这种灵活性。

编辑:

您可以创建如下视图:

create view table_fr as
     select id, fr_name, fr_phone, fr_address
     from t;

但最佳做法是使用一个将语言存储为单独列的表:

id
Language
Name
Phone
Address

将单个id的数据拆分为多行,每种语言一行。您可能有另一个表,用于表示有关id的语言无关信息。

答案 1 :(得分:1)

(这个答案最初由Mark Bannister撰写,但他删除了。我不知道为什么 - 这是一个很好的建议)

最佳做法是规范化您的表格 - 因此给定的结构将变为:

id
language
name
phone
address

然后,您可以通过运行以下查询获取特定语言的值列表:

select * from myTable
where language = 'en';