日期:2014-05-19  浏览次数:20483 次

SQL高手请进,谁能给我解释一下这条SQL语句是怎么工作的
本语句主要是实现:在表SC中查找出e   无重复记录,有重复的话保留   L最小的,问题有4个。1.始终无法理解那个a是做什么的,因为如果是别名的话应该是SC   as   a,如果a是一个表的话应该有豆号。2.整条语句是怎么工作的是不是有cross连接之类的,3.select   1是什么意思?4.最近这条语句出了点问题,如果我要找出T=1的语句应该怎么写。谢谢
SELECT   TOP   100   r,   e,   t,   L
FROM   SC   a
WHERE   (NOT   EXISTS
                    (SELECT   1
                  FROM   sc
                  WHERE   e   =   a.e   AND   L   <   a.L))  


------解决方案--------------------
a就是一个别名
------解决方案--------------------
1. a 为表别名, 也可以用 SC as a ,等同
2. 可以看作是交叉连接一种,以e列分组,逐组扫描
3. Select 1 一般用于Exists语句类中,其列值不关心情况,
可以任意设置,如:Select 2 或Select *等
4. SELECT * from FROM SC where t=1 --??
------解决方案--------------------
( e = 当前e 并且 L < 当前L 的数没有)就显示当前~~只显示前100条


SELECT TOP 100 r, e, t, L --这里就是当前数据r,e,t,L
FROM SC a
WHERE (NOT EXISTS
(SELECT 1
FROM sc
WHERE e = a.e AND L < a.L))



------解决方案--------------------

SELECT TOP 100 r, e, t, L
FROM SC a
WHERE (NOT EXISTS
(SELECT 1
FROM sc b
WHERE b.e = a.e AND b.L < a.L))
我的理解:
1:a 相当于对SC 重新命名,名字可以随便起
2:我认为相当于对自身的一个嵌套,比如说sc 中只有三条记录具有相同的e,三条记录分别标识为r1,r2,r3,,l值分别为l1,l2,l3,l1 <l2 <l3,外层SELECT 语句搜索到r1,此时a.l=l1,判断其是否符合条件,
内层SELECT开始搜索b,检索第一行r1, 此时a 和b指向的是同一行记录b.e=a.e,b.L=a.L, "WHERE b.e = a.e AND b.L < a.L "不符合。内层SELECT检索b至第二行r2,此时b.L=r2, 所以b.e=a.e,b.L> a.L, " WHERE b.e = a.e AND b.L < a.L " 不满足条件。内层SELECT检索b至第三行r3,和第二行情况一样。之后b中再没有和a中当前行r1相同的e,所有的都不符合WHERE b.e = a.e AND b.L < a.L,即NOT EXISTS,r1符合条件。外层 搜索a到第二行r2,a.L=l2 内层b检索第一行r1,b.L=l1,符合WHERE b.e = a.e AND b.L < a.L, 有NOT EXISTS,所以a中的r2不符合条件。r3 情况一样。
3:select 1 的重点并不是1,而是满足后面的条件。
4:应该罢 t = 1 加在外层。
WHERE (NOT EXISTS
(SELECT 1
FROM sc
WHERE e = a.e AND L < a.L))and t = 1


当然你也可以
select * from
(SELECT TOP 100 r, e, t, L
FROM SC a
WHERE (NOT EXISTS
(SELECT 1
FROM sc
WHERE e = a.e AND L < a.L)) )c
where t = 1