2017-05-09 70 views
1

我有以下查詢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在此查詢實際執行。我不確定是否有可能瞭解查詢併爲沒有演示數據的人提供答案,但我目前沒有演示數據。

+0

這裏對於C.ID,C是指TABLEA數據。 – bigbounty

+0

我明白,但它是通過訪問tableA的數據並將其等同於ID – Ahmad

回答

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 

子查詢確保只有具有最大(日期)列,並鍵入HELLO將從行具有相同id來選擇所以上述數據結果將返回:

ID  VAL  TYPE  DATE 
1   JUNIOR HELLO  03-JAN-1970 
2   JUNIOR HELLO  05-JAN-1970 

基本上,它只是具有給定的ID也是類型HELLO和Val高級的,只要與該行返回與最新的日期行的行最新的日期也有SENIOR的值。

+0

從邏輯上做到的。不,它不是主鍵。那麼您的意思是子查詢將針對基於WHERE條件的外部查詢中選定的行運行? – Ahmad

+0

很酷。好的,用一個例子更新我的迴應。希望有所幫助。 –

+0

謝謝 - 你知道任何資源,我可以閱讀更多嗎? – Ahmad