我有以下查詢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