2017-06-05 4 views
-1

Ich bin immer noch ziemlich frisch mit SQL im Allgemeinen, so ist dies wahrscheinlich nicht die beste formulierte Frage. Ich möchte Spalten aus verschiedenen Tabellen abrufen. Sie haben keine gemeinsame Spalte, aber es gibt eine dritte Tabelle mit Informationen, die sie miteinander verbinden können. DieseOracle SQL mehrere Tabellen

ist, wie ich habe versucht, darüber zu gehen:

SELECT 
    CI_SA.ACCT_ID, 
    CI_SA.EXPIRE_DT WHERE EXPIRE_DT BETWEEN '15-APR-17' AND '30-APR-17', 
    CI_SP.SP_TYPE_CD WHERE SP_TYPE_CD='G-RES' 
FROM CI_SA 
INNER JOIN CI_SA ON CI_SA.SA_ID = CI_SA_SP.SA_ID AND CI_SP.SP_ID = 
CI_SA_SP.SP_ID 

Und das ist der Fehler, den ich im Gegenzug erhalten: ORA-00923: FROM-Schlüsselwort nicht gefunden, wo 00923. 00000 erwartet -
* Aktion: Fehler in Zeile: * Ursache „Schlüsselwort FROM nicht an erwarteter Stelle gefunden“ 3 Säule: 18

Wer mich zum Punkt der Lage wäre, wo ich habe etwas falsch gemacht?

+2

Bearbeiten Sie Ihre Frage und bieten Beispieldaten und gewünschte Ergebnisse. Ihre Syntax ist so weit von Standard-SQL entfernt, dass die Absicht unklar ist. –

Antwort

0

Zusätzlich zu dem, was die anderen gesagt haben, re. Da die Where-Klauseln am falschen Ort sind, müssen Sie auch Ihre Tabellen korrekt verbinden. Ich denke, Sie sind nach etwas wie:

SELECT CI_SA.ACCT_ID, 
     CI_SA.EXPIRE_DT WHERE EXPIRE_DT BETWEEN '15-APR-17' AND '30-APR-17', 
     CI_SP.SP_TYPE_CD WHERE SP_TYPE_CD='G-RES' 
FROM CI_SA 
     INNER JOIN CI_SA_SP ON CI_SA.SA_ID = CI_SA_SP.SA_ID 
     INNER JOIN CI_SP ON CI_SP.SP_ID = CI_SA_SP.SP_ID 
WHERE CI_SA.EXPIRE_DT BETWEEN TO_DATE('01/04/2017', 'DD/MM/YYYY') AND TO_DATE('30/04/2017', 'DD/MM/YYYY') 
AND CI_SP.SP_TYPE_CD = 'G-RES'; 
+1

Danke für die Aufklärung! Ich ging davon aus, dass ich die Joins zusammenfassen könnte (was nicht der Fall war). Jetzt läuft alles wie es soll – Huskeh

1

die in dem Zustand nach from table zum Beispiel sein sollte select * from tab1 where ....

es so versuchen:

SELECT 
    CI_SA.ACCT_ID, 
    CI_SA.EXPIRE_DT , 
    CI_SP.SP_TYPE_CD 
FROM CI_SA 
INNER JOIN CI_SA ON CI_SA.SA_ID = CI_SA_SP.SA_ID AND CI_SP.SP_ID = 
CI_SA_SP.SP_ID 
WHERE EXPIRE_DT BETWEEN '15-APR-17' AND '30-APR-17' 
and SP_TYPE_CD='G-RES' 

auch als Benutzer artur bemerkt, sind joinin Sie auf CI_SA? oder CI_SA_SP? wenn CI_SA haben fügen Sie auch Alias ​​wie unten:

INNER JOIN CI_SA CI_SA_SP ...

1

Die where-Klauseln am Ende sein sollte:

SELECT 
    CI_SA.ACCT_ID, 
    CI_SA.EXPIRE_DT , 
    CI_SP.SP_TYPE_CD 
FROM CI_SA 
INNER JOIN CI_SA ON CI_SA.SA_ID = CI_SA_SP.SA_ID AND CI_SP.SP_ID = 
CI_SA_SP.SP_ID 
WHERE EXPIRE_DT BETWEEN '15-APR-17' AND '30-APR-17' and SP_TYPE_CD='G-RES' 
1

Die WHERE Klausel geht nach die FROM und nur erscheint einmal pro SELECT.

Vielleicht beabsichtigen Sie:

SELECT CI_SA.ACCT_ID, CI_SA.EXPIRE_DT, CI_SP.SP_TYPE_CD 
FROM CI_SA INNER JOIN 
    CI_SA_SP 
    ON CI_SA.SA_ID = CI_SA_SP.SA_ID AND 
     CI_SP.SP_ID = CI_SA_SP.SP_ID 
WHERE CI_SA.EXPIRE_DT BETWEEN DATE '2017-04-15' AND DATE '2017-04-30' AND 
     CI_SP.SP_TYPE_CD = 'G-RES'; 

In diesem fixiert die FROM Klausel, so dass es zu CI_SA_SP bezieht. Ich nehme an, dies war ein Tippfehler in Ihrer ursprünglichen Abfrage. Außerdem empfehle ich dringend, ISO-Standard-Datumsformate zu verwenden, daher wird das Schlüsselwort DATE verwendet.

0

Zuerst 'SELECT', dann 'FROM' und das letzte 'WHERE'. Nur eine WHERE-Klausel ist zulässig. Doppelte CI_SA in Join. Sie sollten Aliase verwenden