【问题标题】:Selecting all fields except only one field in mysql [duplicate]在mysql中选择除一个字段之外的所有字段[重复]
【发布时间】:2012-12-24 14:36:17
【问题描述】:

可能重复:
Select all columns except one in MySQL?

我想知道有没有办法从我的数据库中的表中选择除一个字段之外的所有字段。

我知道我可以描述选择查询中的字段名称。
例如:

SELECT fieldname1, fieldname2, fieldname3, fieldname4 FROM tablename;

但我的问题是,有没有办法以简单的方式做到这一点......像这样

SELECT * FROM tablename EXCEPT(fieldname3);

我正在使用 MySQL 和 Zend 框架。

【问题讨论】:

  • @sirwilliam 如果你要将一个数字增加 5,你会写一个 += 5;因为你懒得打出 a = a+1+1+1+1+1?编写代码通常与可读性有关。如果在您的 SQL 查询中您想要选择除一列之外的所有列,那么与您愿意完成的最接近的形式确实类似于 SELECT * EXCEPT lame_field FROM ...
  • 这很愚蠢,他们没有更简单的方法来执行此操作,例如 SELET * ,~id ...等,当我们最常使用 SELECT FROM 创建表时,我们想省略自动 ID,
  • 我完全同意 mahen3d ,wtf?我在 SQL 中有 2 个共享相同结构的表。如果将来我希望修改/添加/删除列,我不想在代码的某些部分也添加这些列。它的可维护性较差,而且是一个会导致您的应用出现错误的坏主意。

标签: php mysql database zend-framework select


【解决方案1】:

是的,您可以从 information_schema.columns 获取

SET @sql = CONCAT('SELECT ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM 
information_schema.columns WHERE table_schema = 'dbo' AND table_name = 
'tablename' AND column_name NOT IN ('c1', 'c2')), 
' from dbo.tablename');  

PREPARE stmt1 FROM @sql;

EXECUTE stmt1;

【讨论】:

    【解决方案2】:

    你可以轻松做到这一点

    假设您的字段是 id = 5

    然后

       select * from your_table where id !=5 
    

    如果你的意思是列

    假设你不想选择column3

    然后

       select column1,column2,column4 from tablename;
    

    如果你有很多列

        SET @sql = CONCAT('SELECT ', (SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME),  '<columns_to_delete>,', '') 
        FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '<table>'   AND TABLE_SCHEMA = '<database>'), ' FROM <table>');
    
        PREPARE stmt1 FROM @sql;
       EXECUTE stmt1;
    

    【讨论】:

    • 哇,难怪人们都在从 sql 中脱身,真是一团糟
    【解决方案3】:

    试试这个 -

    SHOW FIELDS FROM `tablename` WHERE FIELD NOT IN ('f1','f2','f3');
    

    执行此查询并获取特定的字段名称并将每个字段名称放入一个数组中。 然后在 select 查询中使用 ',' 内爆数组。

    $fields = implode(',',$fields_arr);
    $sql = SELECT $fields FROM `tablename`;
    

    【讨论】:

    • 不,这不起作用,至少在 MYSQL 中它不起作用
    • 这种方法的正确方法是在 MYSQL SHOW COLUMNS FROM WHERE Field !=''
    • SHOW FILEDS & SHOW COLUMNS 在 MySQL 5.7.19-0ubuntu0.16.04.1 上给我同样的结果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 2019-04-16
    • 1970-01-01
    • 2011-09-07
    相关资源
    最近更新 更多