【发布时间】:2012-07-20 11:05:48
【问题描述】:
对以下查询背后的机制有何解释?
它看起来像是一种对表格进行动态过滤的强大方法。
CREATE TABLE tbl (ID INT, amt INT)
INSERT tbl VALUES
(1,1),
(1,1),
(1,2),
(1,3),
(2,3),
(2,400),
(3,400),
(3,400)
SELECT *
FROM tbl T1
WHERE EXISTS
(
SELECT *
FROM tbl T2
WHERE
T1.ID = T2.ID AND
T1.amt < T2.amt
)
【问题讨论】:
-
它从
tbl中选择行,其中存在具有相同 id 且数量更大的另一行。即它不是与MAX(amt)对应的ID的一行。还有什么需要解释的?也可以使用SELECT ID,amt FROM (SELECT *, RANK() OVER (PARTITION BY ID ORDER BY amt DESC) RNK FROM tbl ) T WHERE RNK <> 1 -
...不太清楚我的代码的最后一行是从哪里出现的 - 我将编辑 OP
标签: sql sql-server exists