2016-06-15 9 views
0

Nicht sicher, wie die folgende Abfrage neu schreiben. Ich versuche table_a mit dem letzten table_b-Datensatz zu verbinden. Derzeit wird nur für eine ID getestet, aber ein anderes Kriterium für Tabelle_a kann hinzugefügt werden:ORA-01799 - muss Abfrage korrigieren

Select t.* 
from table_a t 
left join table_b d on d.id = T.id and d.MOD_DATE IN (SELECT MAX(mod_date) FROM table_b d2 WHERE d2.id = t.id) 
where T.id = 123456 

Irgendwelche Vorschläge?

+0

Schritt 1 - bestimmen, was Sie versuchen zu erreichen. –

+0

@DanBracuk siehe meine Bearbeitung. – user3224907

Antwort

1

Ich glaube, Sie suchen nach etwas, wie:

SELECT  t.* 
FROM  table_a t 
LEFT JOIN (
       SELECT  d.* 
       FROM  table_b d 
       INNER JOIN (
           SELECT id 
           ,  MAX(mod_date) mod_date_max 
           FROM table_b d2 
           GROUP BY id 
          ) db 
         ON db.id = d.id 
         AND db.mod_date_max = d.mod_date 
      ) d 
     ON d.id = T.id 
WHERE  T.id = 123456 

Beachten Sie, dass Ihre where Klausel die left join in eine inner join verwandelt.

Auch, wenn Sie einen Fehler erhalten, bitte auch die Fehlermeldung, nicht nur ihre Nummer.

0

Ich fand auch das gleiche mit der folgenden Abfrage erreicht werden kann:

SELECT * FROM table_a t 
WHERE id IN (
       SELECT id 
        FROM (
          SELECT id,MAX(MOD_DATE) 
          FROM table_b 
          WHERE id = 123456 
         GROUP BY id  
         ) 
      ) 
Verwandte Themen