我有一个 mySQL 数据库,我想知道是否可以选择列,而不是按它们的名称,而是按它们在表中的位置。
假设我有一个包含以下列的表格(混合英语和法语数据):
id
en_name
en_phone
en_address
fr_name
fr_phone
fr_address
但这只是为了演示目的,我的真实表有 20 个英文和 20 个法文列。
是否可以选择所有英文或所有法文列而不列出其名称SELECT
?
如果这不可能,最好的做法是什么?
使用标准 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 的与语言无关的信息。
(这个答案最初是由Mark Bannister写的,但他删除了它。我不知道为什么 - 这是个好建议)
最佳做法是规范化您的表格 - 因此给定的结构将变为:
id
language
name
phone
address
然后,您可以通过运行如下查询来获取特定语言的值列表:
select * from myTable
where language = 'en';