假设r是一个关系,a是其中的属性(数值型的),下面的sql执行是否有问题,执行过程是怎样的?
delete from r
where a < (select arg(a) from r)

解决方案 »

  1.   

    可以。(select arg(a) from r)得到a的平均值。然后根据这个平均值在r表里过滤数据。
      

  2.   

    eygle@SZTYORA> select * from emp;     EMPNO ENAME                JOB                       MGR HIREDATE                   SAL       COMM     DEPTNO LOC                                 T
    ---------- -------------------- ------------------ ---------- ------------------- ---------- ---------- ---------- -------------------------- ----------
          7499 ALLEN                SALESMAN                 7698 1981-02-20 00:00:00       1600        300         30 CHICAGO
          7521 WARD                 SALESMAN                 7698 1981-02-22 00:00:00       1250        500         30 CHICAGO
          7654 MARTIN               SALESMAN                 7698 1981-09-28 00:00:00       1250       1400         30 CHICAGO
          7698 BLAKE                MANAGER                  7839 1981-05-01 00:00:00       2850            30 CHICAGO
          7844 TURNER               SALESMAN                 7698 1981-09-08 00:00:00       1500          0         30 CHICAGO
          7900 JAMES                CLERK                    7698 1981-12-03 00:00:00        950            30 CHICAGO
          7369 SMITH                CLERK                    7902 1980-12-17 00:00:00        800            20 DALLAS
          7566 JONES                MANAGER                  7839 1981-04-02 00:00:00       2975            20 DALLAS
          7788 SCOTT                ANALYST                  7566 0087-07-13 00:00:00       3000            20 DALLAS
          7876 ADAMS                CLERK                    7788 0087-07-13 00:00:00       1100            20 DALLAS
          7902 FORD                 ANALYST                  7566 1981-12-03 00:00:00       3000            20 DALLAS
          7782 CLARK                MANAGER                  7839 1981-06-09 00:00:00       2450            10 NEW YORK
          7839 KING                 PRESIDENT                     1981-11-17 00:00:00       5000            10 NEW YORK
          7934 MILLER               CLERK                    7782 1982-01-23 00:00:00       5001            10 NEW YORK已选择14行。eygle@SZTYORA> delete from emp
      2  where sal>(select avg(sal) from emp);已删除7行。-- 就是这样的做法!不要怀疑自己,既然怀疑自己的话,何不动手去揭开迷团呢?
      

  3.   

    最近看书的时候,书上说上面的语句会出问题。我想知道是sql标准规范了先扫描后执行的操作,还是具体数据库规范了这个操作。上面的语句在mysql下会报错。
      

  4.   

    -- 悲哀:现在才提到”上面的语句在mysql下会报错“,这是Oracle版,你早干嘛去啦?
    -- 你应该到mysql版下去发贴子才对啊!
      

  5.   

    我的意思是说,在sql标准中,有没有对上面语句执行过程的解释。而不是具体到oracle或mysql等不同数据库的层面上。因为oracle上牛人比较多,所以发到这上面了,导致大家误会了,请见谅。
      

  6.   

    求平均不是arg()函数,是avg()才对喔.
    SQL语法没问题的.
      

  7.   

    delete from r
    where a < (select avg(a) from r)