我有一个mySQL数据库,我想知道我是否可以选择列,而不是按名称,而是通过它们在表中的位置.
我们认为我有一个表(混合的英语和法语数据)与以下列:
id
en_name
en_phone
en_address
fr_name
fr_phone
fr_address
Run Code Online (Sandbox Code Playgroud)
但这仅用于演示目的,我的真实表有20个英文和20个法文专栏.
是否可以选择所有英语或所有法语列而不列出其名称SELECT?
如果这是不可能的,最好的做法是什么?
使用标准SQL,答案是否定的.没有像这样的构造:
select fr_*
Run Code Online (Sandbox Code Playgroud)
获取所有以列开头的列fr_.
您可以使用动态SQL(预准备语句)生成所需的SQL.您可以使用视图仅选择英语或法语列.您可以存储数据,以便列位于不同的行上,并且您具有用于选择的语言标识符.在某些数据库中,您可以使用存储过程仅返回所需的列.
但是,仅使用SQL查询,您就没有这种灵活性.
编辑:
您可以创建一个视图,如:
create view table_fr as
select id, fr_name, fr_phone, fr_address
from t;
Run Code Online (Sandbox Code Playgroud)
但是,最佳做法是使用一个将语言存储为单独列的表:
id
Language
Name
Phone
Address
Run Code Online (Sandbox Code Playgroud)
并将单个数据拆分id为多行,每种语言一行.您可能有另一个表,用于表示有关id的语言无关信息.