我有以下查询SQL很难理解查询
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在此查询实际执行。我不确定是否有可能了解查询并为没有演示数据的人提供答案,但我目前没有演示数据。
我有以下查询SQL很难理解查询
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在此查询实际执行。我不确定是否有可能了解查询并为没有演示数据的人提供答案,但我目前没有演示数据。
基本上,它确保子查询中的行仅与具有相同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
子查询确保只有具有最大(日期)列,并键入HELLO将从行具有相同id来选择所以上述数据结果将返回:
ID VAL TYPE DATE
1 JUNIOR HELLO 03-JAN-1970
2 JUNIOR HELLO 05-JAN-1970
基本上,它只是具有给定的ID也是类型HELLO和Val高级的,只要与该行返回与最新的日期行的行最新的日期也有SENIOR的值。
这里对于C.ID,C是指TABLEA数据。 – bigbounty
我明白,但它是通过访问tableA的数据并将其等同于ID – Ahmad