【问题标题】:SELECT in mysql using column number instead of name在mysql中选择使用列号​​而不是名称
【发布时间】:2013-07-11 16:19:33
【问题描述】:

有什么办法可以做到:

SELECT * FROM TABLE WHERE COLUMN_NUMBER = 1;

?

【问题讨论】:

标签: mysql sql ordinal


【解决方案1】:

我是怎么做到的:

我正在尝试在 sometable

set @mydb=(SELECT DATABASE());
set @mycol=(select COLUMN_NAME from information_schema.columns where
         table_schema=@mydb and table_name='sometable' and ordinal_position = 4);
SELECT Date,@mycol FROM sometable ORDER BY Date DESC LIMIT 3;

当然,如果数据库名是已知的,第一行可以被鞭打,@mydb替换为真实的数据库名。

【讨论】:

    【解决方案2】:

    你可以做到这一点

    例子:

    $query="select * from employee";
    
    $result=mysql_query($query);
    
    $meta=mysql_fetch_field($result,0)  // 0 is first field in table  , 1 is second one ,,, etc
    
    $theNameofFirstField=$meta->name;    // this well return first  field name in table
    
    
    // now you can use it in other query
    
    $seconQuery="select $theNameofFirstField from employee";
    

    【讨论】:

    • @gran_profaci 没有说他们正在使用 PHP,也没有用它标记问题。
    【解决方案3】:

    如果您的表有一个名为 COLUMN_NUMBER 的列,并且您想从该列包含值“1”的表中检索行,那么该查询应该可以解决问题。

    我怀疑您正在尝试使用别名引用选择列表中的表达式。这不受支持。 WHERE 子句中引用列的表达式必须按名称引用列。

    我们可以使用内联视图玩一些技巧,为表达式赋予别名,但这在 WHERE 谓词方面效率不高,因为 MySQL 实现派生表的方式。而且,在这种情况下,它是内联视图中必须在外部查询中引用的列的名称。

    【讨论】:

      【解决方案4】:

      不,你不能。列顺序在 MySQL 中并不重要。有关详细信息,请参阅以下问题。

      mysql - selecting values from a table given column number

      【讨论】:

        猜你喜欢
        • 2011-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多