我有以下查询
SELECT * FROM TABLEA C
WHERE C.VAL = 'SENIOR'
AND C.TYPE = 'HELLO'
AND C.DATE = (SELECT MAX(DATE) from TABLEA WHERE TYPE =
'HELLO' AND C.ID=ID)
我无法理解内部查询中的C.ID = ID在此查询中实际执行的操作。我不确定是否可以理解没有演示数据的人的查询和答案,但我目前没有演示数据。
答案 0 :(得分:1)
基本上,它确保子查询中的行仅匹配具有相同ID的外部查询中的行。但是,如果TABLEA.ID是主键,则子查询看起来有点多余。可能最好以一个例子来说明。假设ID不是主键,因此可以有多个具有相同ID的行:
ID VAL TYPE DATE
1 SENIOR HELLO 01-JAN-1970
1 SENIOR HELLO 02-JAN-1970
1 JUNIOR HELLO 03-JAN-1970
1 SENIOR HELLO 03-JAN-1970
2 SENIOR HELLO 04-JAN-1970
2 JUNIOR HELLO 05-JAN-1970
2 SENIOR HELLO 05-JAN-1970
2 JUNIOR BYE 06-JAN-1970
3 JUNIOR BYE 06-JAN-1970
子查询确保只从具有相同id的行中选择具有max(date)和type HELLO的行,以便返回上述数据的结果:
ID VAL TYPE DATE
1 JUNIOR HELLO 03-JAN-1970
2 JUNIOR HELLO 05-JAN-1970
基本上,它只返回具有给定id的行的最新日期的行,该行也是HELLO和val SENIOR类型,只要具有最新日期的行也具有SENIOR的值。