Wenn Sie die gleiche Spalte q_id in der WHERE-Klausel Ihrer Inline-Ansichten tb1 und tb2 verwenden, sollten Sie tb1 und tb2 nach diesen Kriterien verknüpfen. Dann benötigen Sie nur eine WHERE-Bedingung, die auf q_id verweist.
Auch als a_horse_with_no_name kommentiert, bin ich nicht ganz sicher, was Sie mit der Funktion get_date() erreichen wollen. In meinem Beispiel ging ich davon aus, dass Sie versuchen, Ergebnisse zu filtern, indem Sie nur diejenigen für den aktuellen Tag zurückgeben. Dafür habe ich sysdate und die TRUNC-Funktion verwendet. Wenn Sie versuchen, etwas anderes zu erreichen, ändern Sie die WHERE-Klausel entsprechend.
Als eine Randnotiz empfehle ich nur explizite Variablenreferenzierung zu verwenden und 'SELECT *' zu vermeiden, insbesondere wenn Sie Fragen zum Stapelwechsel stellen. Damit war ich nicht sicher, aus welcher Tabelle die Variablen 'nm', 'no' und 'p' stammen. Ich nahm sie aus der Tabelle waren 3.
SELECT
TB1.q_id,
TB1.s_id,
TB2.date,
TB3.no,
TB3.nm,
TB3.p
FROM table1 TB1
INNER JOIN table3 TB3
ON TB1.s_id = tb3.s_id
LEFT JOIN table2 TB2
ON TB1.s_id = TB2.s_id
AND TB1.q_id = TB2.q_id
WHERE TRUNC(TB2.date) = TRUNC(sysdate)
AND TB1.q_id = 100
ORDER BY
TB3.no ASC
;
Wenn Ihre Tabellen korrekt indiziert sind, gibt es nicht eine Leistung durch den Verlust der vorgefilterten in-line Ansichten getroffen werden sollte.
Markieren Sie die korrekte Datenbank, die Sie verwenden –
Es gibt keine 'getdate()' Funktion in Oracle. Welches DBMS benutzt du ** wirklich **? –
Ich benutze Oracle SQL Developer – Deb