我有一个mySQL数据库,我想知道我是否可以选择列,而不是按名称选择列,而是选择它们在表中的位置。
我们认为我有一个表(混合英语和法语数据),其中包含以下列:
id
en_name
en_phone
en_address
fr_name
fr_phone
fr_address
但这只是为了演示目的,我的真正的桌子有20个英文和20个法国专栏
是否可以选择所有英语或所有法语列而不在SELECT
中列出其姓名?
如果这是不可能的,最佳做法是什么?
答案 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';