查看: 1447|回复: 12
|
一个简单却值得深思的SQL 问题
[复制链接]
|
|
在这里我想和大家讨论一下以下这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 呢? |
|
|
|
|
|
|
|

楼主 |
发表于 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
可否說得仔細點,不是很明白你的意思。 |
|
|
|
|
|
|
|
发表于 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 |
|
|
|
|
|
|
|
发表于 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
|
显示全部楼层
|
|
|
|
|
|
| |
本周最热论坛帖子
|