佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1447|回复: 12

一个简单却值得深思的SQL 问题

[复制链接]
发表于 7-2-2007 11:38 AM | 显示全部楼层 |阅读模式
在这里我想和大家讨论一下以下这SQL 的问题:

TABLE "EMPSALARY"
EMPNO     SALARY     DIRECT_MANAGER
R01       1500       <NULL>
R02       1800       R01
R03       1700       R02

试问要写一个SQL COMMAND 来找出哪一位EMPNO 的SALARY GREATER THAN 他/她的DIRECT_MANAGER的SALARY. 从TABLE里我们很快就可以知道答案是R02, 哪大家会如何写SQL 呢?
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 7-2-2007 12:19 PM | 显示全部楼层
对于这问题我自己也尝试过:
以下是我的答案:(我觉得我做的很复杂,我希望看到简化的例子)

1)我create了一个view “test1”from "EmpSalary", SQL command show as below :
   SELECT     empno, Salary
   FROM       EmpSalary
   
2) 我又create 了一个view "test2" 来link“empsalary”and "test1",
   sql command as below :
   SELECT EmpSalary.empno,empsalary.Salary,
                  empsalary.Direct_Manager,test1.Salary AS Mag_Salary
   FROM EmpSalary LEFT OUTER JOIN
               test1 ON EmpSalary.Direct_Manager = test1.empno

   我得到了一下的result :
        empno           Salary  Direct_Manager  Mag_Salary
        r01            1800        Null                     Null
        r02            2000        r01               1800
        r03            1700        r02               2000

   From here, i write sql command :
   SELECT     test2.*
   FROM       test2
   WHERE     (Salary > Mag_Salary)

   我才得到以下result :
       EmpNo     Salary    Direct_Manager   Mag_salary
        r02      2000           r01                   1800

各位大大,我是不是把问题复杂化了 ,有没有谁可以指点指点我!! 谢谢
回复

使用道具 举报

发表于 7-2-2007 12:19 PM | 显示全部楼层
SELECT * FROM EMPSALARY AS A INNER JOIN EMPSALARY AS B ON A.DIRECT_MANAGER = B.EMPNO WHERE A.SALARY > B.SALARY
回复

使用道具 举报

 楼主| 发表于 7-2-2007 12:52 PM | 显示全部楼层
啊。。我忘了可以set table as ,谢谢你。
我又学多了样知识!
回复

使用道具 举报

发表于 9-2-2007 07:21 PM | 显示全部楼层
我也有个简单的问题。。但不记得怎么做了


我有个table,
Col A   | Col B   | Col C

要拿最大的值 col B, colC 的row index 要跟col B.. 然后要grp by Col A
回复

使用道具 举报

发表于 9-2-2007 07:47 PM | 显示全部楼层
原帖由 tensaix2j 于 9-2-2007 07:21 PM 发表
我也有个简单的问题。。但不记得怎么做了


我有个table,
Col A   | Col B   | Col C

要拿最大的值 col B, colC 的row index 要跟col B.. 然后要grp by Col A

可否說得仔細點,不是很明白你的意思。
回复

使用道具 举报

Follow Us
发表于 9-2-2007 10:46 PM | 显示全部楼层
colA    colB     colC
1        4        9
1        5        1
2        5        3
2        2        4
2        1        2
1        3        3
3        6        2
3        4        6

我要的结果:
colA   colB   colC
1       5      1
2       5      3
3       6      2

当然self join可以解决。
可以的话,能不能不join 回自己来做。。
回复

使用道具 举报

 楼主| 发表于 12-2-2007 08:14 AM | 显示全部楼层
原帖由 tensaix2j 于 9-2-2007 10:46 PM 发表
colA    colB     colC
1        4        9
1        5        1
2        5        3
2        2        4
2        1        2
1        3        3
3        6        2
3        4        6

我 ...


我做的如下, 可是col3 call 不出来,请指教 !!

SELECT    col1, Max(col2) as col2
FROM     Table1  
group by col1
回复

使用道具 举报


ADVERTISEMENT

发表于 13-2-2007 07:59 AM | 显示全部楼层
原帖由 海星1988 于 12-2-2007 08:14 AM 发表


我做的如下, 可是col3 call 不出来,请指教 !!

SELECT    col1, Max(col2) as col2
FROM     Table1  
group by col1



谢谢你的回复。。

没关系啦。。最后还是
select a.*,b.col3 from
(select col1,max(col2) as col2 from tbl1 where col3 is not null group by col1) as a
left join
tbl1 b
on a.col1=b.col1 and a.col2=b.col2

但总是觉得多了一step的感觉。。
回复

使用道具 举报

 楼主| 发表于 13-2-2007 08:09 AM | 显示全部楼层
原帖由 tensaix2j 于 13-2-2007 07:59 AM 发表



谢谢你的回复。。

没关系啦。。最后还是
select a.*,b.col3 from
(select col1,max(col2) as col2 from tbl1 where col3 is not null group by col1) as a
left join
tbl1 b
on a.col1=b.col1  ...


哈哈。。, 我是觉得有一点复杂, 总觉得可以再简化一些。。, 我会再试一试!
在此,我希望大家可以来这里分享更多有趣的sql 问题。。, 从中分享大家解决问题的方法!!
回复

使用道具 举报

 楼主| 发表于 1-3-2007 05:22 PM | 显示全部楼层
我又有一个问题了:
我要update 一个field from 一个table去另一个table.如下:

Table A
EmpNo     Date
123       2006
456       2006
789       2007

Table B
EmpNo     Salary     Date
123       1000       Null
456       1000       Null
789       2000       Null

Result i want :
EmpNo     Salary     Date
123       1000       2006
456       1000       2006
789       2000       2007

注:我要update table.., 不是view table
我越写就越乱 。。。, 所以来这里问问!!!
回复

使用道具 举报

发表于 1-3-2007 06:58 PM | 显示全部楼层
update table_b set date = a.date
from table_a a, table_b b
where b.empno = a.empno

大概是这样吧,我没试过
回复

使用道具 举报

 楼主| 发表于 2-3-2007 08:29 AM | 显示全部楼层

回复 #12 神仙祖宗 的帖子

非常感谢你。。, 成功了!! 我是不是很笨哦!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 28-8-2025 04:43 AM , Processed in 0.142090 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表