首页 > 解决方案 > MYSQL查询表使用列位置,而不是列名

问题描述

是否可以编写如下查询?

UPDATE sale SET sale_order='123456789' WHERE **COLUMN_1** = 2

我没有明确传递列名?只有它的位置?

我可以获得列名,但我试图避免只为了获取它们而查询数据库。

谢谢。

标签: mysql

解决方案


要回答您的问题,不,SQL 中没有按位置引用列的语法。这可以追溯到关系理论,在某种意义上,表是一列,而一组的成员是无序的。

您要么必须知道列名,要么从数据库中查询它:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='sale' 
  AND ORDINAL_POSITION=1;

通过假设第一列是主键,您似乎正在尝试设计一个按主键更新行的查询。主键不一定是第一列。它不一定是整数。它不一定是单列。

因此,您已经在对表定义做出假设。您不妨假设主键列已命名id或其他约定。


推荐阅读