假设现在有表a 50个字段 1,2,3,4.....50
全选为 select * from `a`现在不想选第48个字段的信息
而我又不想写 select 1,2,3,4,5...(没有48)..50 from `a` 有什么办法?有没有啥语法?google都不知道该咋搜啥.....囧zzzz

解决方案 »

  1.   

    如果是mysql
    select * from a
      limit 0, 48如果是Oracle
    select * from 
    ( select * from a )
    where 1 >= rownum and rownum <= 48; 
    如果允许使用PEAR,可以直接用parger
      

  2.   

    晕,你读出来不用不就完了。
    如果你非要这么做,那就建个视图,不包含这个字段。
    然后可以直接select * from v_table
      

  3.   

    其实这语句本来很麻烦, 我只是为了简化一下问题复杂度才这么问的... 原语句和结构:a,b,c 三表 字段名(不规则,无法用数学运算判断),字段数各不同 select distinct * 
    from 
    `a` natural join `b` natural join `c` 
    where 
    `a`.`1` = `c`.`1` and `a`.`2` = xxx因为c中有一个字段是老鼠屎c.shit distinct后,其余数据会重复..所以我就想不选这个字段,只选其他的...
      

  4.   

    select * from a where id<>48
    如果是几个的话
    select * from a where id not in (40,38)
      

  5.   


    select * from a where id not in (40,38)
    这个的意思是?
    小的不才,没看懂...
      

  6.   


    select * from a where id not in (40,38) 
    =
    select * from a where id!=40 and id!=38
      

  7.   

    额...刚刚想到一个嵌套查询...测试了一下...
    结果是0条
    因为c.shit是包含在c里面的,只要c.shit的not in不匹配,c表一条数据都不会过,natural join不出来大家继续....我加分....select distinct * 
    from 
    `a` natural join `b` natural join `c` 
    where 
    `a`.`1` = `c`.`1` and `a`.`2` = xxx 
    and 
    c.shit not in (select c.shit from c) 
      

  8.   

    用PHP动态生成SQL吧:
    <?php
    $res = mysql_query('select * from `a` limit 1', $link);
    $field_names = array();
    for ($i=0; $i<50; $i++)
    {
      if ($i!=47)
        $field_names[] = mysql_field_name($res, $i);
    }$f_names = implode(",",$filed_names);
    $SQL =<<EOT
    select distinct $f_names 
    from 
    `a` natural join `b` natural join `c` 
    where 
    `a`.`1` = `c`.`1` and `a`.`2` = xxx
    EOT
    ?>
      

  9.   

    select *,null as `48` from a where ...
    这样行不行啊
      

  10.   


    除了视图,这是第二方案,动态生成sql....在runffer_yang提供的代码基础上,我又加入了字段验证...
    //link DB
    $conn = mysql_connect(DB_HOST,DB_USER,DB_PASS);
    $link = mysql_select_db(DB_NAME,$conn);//查一条数据
    $r = mysql_query('select * from `userreg` limit 1');
    //获得表单名数量
    $count = count(mysql_fetch_assoc($r));
    for($i=0;$i<$count;$i++){
    $tmp_name = mysql_field_name($r,$i);
    //过滤掉c.shit
    if($tmp_name != "c.shit"){
    $filed_names[]= mysql_field_name($r,$i);
    }
    }
    $f_names = implode(",",$filed_names);
    $sql =<<<EOT
    select distinct $f_names 
    from 
    `a` natural join `b` natural join `c` 
    where 
    `a`.`1` = `c`.`1` and `a`.`2` = xxx
    EOT;
    //n个字段的sql诞生了
    print_r($sql);
    其实我想要sql....不是一堆php....-_-#
      

  11.   

    单条查询的时候,会新建一个字段为`48`下面的数据都为NULL,可以distinct掉,但是旧的`48` 依旧存在,会出现重复字段.....快了...离目标不远了..加分....
      

  12.   

    -_-!21楼的表名我写错了...
    应该是'select * from `c` limit 1'
      

  13.   

    已知一个表如下:
    ID   姓名 性别 年级 语文 数学 英语。。
    1     张三  男   高一 80    90    90     。通过查询得到
    语文  数学   英语。
    80       90       90  。也就是用户不想查询前面的 “ID 姓名 性别 年级” 这4列。
    但是后面的所有列又都要用户也不希望 SELECT 语文, 数学,英语, ... 后面所有的列名 FROM 表这个只排除某些列以外,其他的列都检索的,只有去查数据字典表,拼动态SQL来处理了。下面是一个演示的例子:(SQL Server 2005 Express 下测试通过)CREATE TABLE TestABC (
      [ID]    INT,
      [姓名]  VARCHAR(10),
      [性别]  CHAR(2),
      [年级]  CHAR(4),
      [语文]  INT,
      [数学]  INT,
      [英语]  INT,
      [物理]  INT,
      [化学]  INT
    );INSERT INTO TestABC
      VALUES(1, '张三', '男', '高一', 80, 90, 90, 95, 90);
    -- 这个SQL,是除了 'ID', '姓名', '性别', '年级' 这4列以外,其他都检索。
    DECLARE @sql VARCHAR(200);
    BEGIN
      SET @sql =
          'SELECT ' + STUFF(
          (SELECT
           ',' + col.name
          FROM
            sys.columns col
          WHERE
            col.object_id =
              (SELECT object_id FROM sys.tables WHERE name = 'TestAbc')
            AND col.name NOT IN ('ID', '姓名', '性别', '年级')
          FOR XML PATH('')), 1 , 1, '') + ' FROM TestAbc';
      EXECUTE (@sql);
    END-- 这个SQL,是排除前面4列,从第5列开始全部检索。
    DECLARE @sql VARCHAR(200);
    BEGIN
      SET @sql =
          'SELECT ' + STUFF(
          (SELECT
           ',' + col.name
          FROM
            sys.columns col
          WHERE
            col.object_id =
              (SELECT object_id FROM sys.tables WHERE name = 'TestAbc')
            AND col.column_id > 4
          FOR XML PATH('')), 1 , 1, '') + ' FROM TestAbc';
      EXECUTE (@sql);
    END
    2个SQL 的结果是一样的:语文          数学          英语          物理          化学
    ----------- ----------- ----------- ----------- -----------
             80          90          90          95          90(1 行受影响)
    http://hi.baidu.com/wangzhiqing999/blog/item/394c5ff831981b96b801a077.html