0

これは単なる例です。私は何千ものレコードを取得するのと同じようなことをしています。

SELECT * FROM 
(SELECT * FROM zoodb) As TblA 
INNER JOIN 
(SELECT animal_ID, Max(checkup_year) AS latest_checkup FROM TblA GROUP BY animal_ID) as TblB 
ON (TblA.animal_ID = TblB.animal_ID) AND (TblA.checkup_year = TblB.latest_checkup) 

基本的には、直近の健康診断年度のみの記録を取得したい

4

4 に答える 4

3

クエリが無効です。


しかし、あなたはそれをこのように行うことができます:

SELECT * FROM zoodb z
INNER JOIN (SELECT animal_ID, Max(checkup_year) AS latest_checkup
            FROM zoodb
            GROUP BY animal_ID) aux ON aux.animal_ID = z.animal_ID AND aux.latest_checkup = z.checkup_year
于 2012-05-18T14:48:04.330 に答える
0
SELECT * FROM 
(SELECT * FROM zoodb) As TblA 
....

このサブクエリは必要ありません。FROM外側のクエリのはそれを処理できます!

SELECT * 
FROM zoodb AS TblA
... 

残りはうまく見えます!

編集:

aFが指摘したように、内部結合サブクエリからTblAを参照することはできません(aFの回答を参照)。

于 2012-05-18T14:50:56.747 に答える
0

aF。の答えは正しいですが、私はあなたの意図をもう少し明確に表現する解決策を提案したいと思いました。

select *
from zoodb as TblA
where latest_checkup = (
    select max(latest_checkup)
    from zoodb
    where animal_id = TblA.animal_id);

[内部結合(副選択)]がないということは、将来、制約を追加する必要がある場合でも、煩雑になりすぎないことも意味します。

于 2012-05-18T15:21:17.217 に答える
0

また、クエリオプティマイザは、ネストされたselectステートメントよりも内部結合を優先するため、よりオプションの実行プランを取得できます。

于 2012-05-18T15:26:12.927 に答える