2017-05-09 4 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 
サブクエリのみMAX(日付)と行とのHELLOタイプが同じIDの行から選択されることを保証する

したがって、上記のデータと結果を返す:

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

基本的には、それだけでも、タイプ、HELLOとval SENIORのと行限りある指定したIDの行の最新の日付を持つ行を返します最新の日付には正義の価値があります。

+0

いいえ主キーではありません。つまり、WHERE条件に基づいて外部クエリで選択された行に対してサブクエリが実行されるということですか? – Ahmad

+0

クール。はい、私の回答を例で更新しました。希望が役立ちます。 –

+0

ありがとう - 私はこれ以上読むことができるリソースを知っていますか? – Ahmad