mysql - SQL Select 基于列的位置。是否可以?

标签 mysql sql select

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

id
en_name
en_phone
en_address
fr_name
fr_phone
fr_address

但这只是为了演示目的,我的真实表有 20 个英语和 20 个法语列。
是否可以选择所有英语或所有法语列而不在 SELECT 中列出它们的名称?
如果这不可能,最好的做法是什么?

最佳答案

使用标准 SQL,答案是否定的。没有像这样的结构:

select fr_*

获取所有以 fr_ 开头的列。

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

但是,仅使用 SQL 查询,您没有那种灵 active 。

编辑:

您可以创建如下 View :

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

不过,最佳做法是将语言存储为单独的列:

id
Language
Name
Phone
Address

并将单个 id 的数据拆分为多行,每种语言一行。您可能有另一个表,用于存储有关 ID 的语言独立信息。

关于mysql - SQL Select 基于列的位置。是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17511851/

相关文章:

mysql - 如果 and 子句中没有数据,则选择错误

asp.net - EF 4.1异常 "The provider did not return a ProviderManifestToken string"

mysql - 生成等于表中行数的数字列表

python - 如何在一行中显示多个字段? (Django 管理员)

mysql - 如何在创建钩子(Hook)调用 mysql 函数之前进行 FEATHERS-sequelize

mysql - 创建连接配置文件时出现问题

java - 如何将多个 "SELECT"语句合并为一个?

select - Swift 中的复杂大小写值

c# Entity Framework 选择派生子项

c# - 访问SQL Server数据库的登录表单错误