2017-03-25 3 views
0
SQL> SELECT CUSTOMER.CUSTOMERID, 
    2 CUSTOMER.CUSTOMERNAME, 
    3 EVENT.EVENTLOCATION 
    4 WHERE NOT EXISTS 
    5 (SELECT * FROM EVENT.EVENTLOCATION AND EVENTLOCATION ="LONDON 02") 
    6 FROM CUSTOMER 
    7 INNER JOIN BOOKING 
    8 ON BOOKING.CUSTOMERID = CUSTOMER.CUSTOMERID 
    9 INNER JOIN EVENT 
10 ON EVENT.EVENTID=BOOKING.EVENTID 
11 INNER JOIN CONCERTS 
12 ON CONCERTS.CONCERTID=EVENT.CONCERTID; 
    WHERE NOT EXISTS 
    * 
ERROR at line 4: 
ORA-00923: FROM keyword not found where expected 

Ich bekomme einen Fehler in Zeile 4 beim Versuch, Kunden zu finden, die nicht an einer Veranstaltung in London mit einem inneren Join teilgenommen haben. Wo liege ich falsch?Sql Inner Join nicht vorhanden Unterabfragefehler

+0

'WHERE' kommt nach' FROM'. –

+0

SQL> SELECT Kunde.Kundennr, 2 CUSTOMER.CUSTOMERNAME, 3 EVENT.EVENTLOCATION 4 FROM CUSTOMER 5 WHERE NICHT EXISTIERT 6 (* FROM EVENT SELECT WHERE EVENTLOCATION = "LONDON 02") 7 INNER JOIN BOOKING 8 ON = BOOKING.CUSTOMERID Kunde.Kundennr 9 INNER JOIN EVENT 10 ON = EVENT.EVENTID BOOKING.EVENTID 11 INNER JOIN KONZERTEN 12 ON = CONCERTS.CONCERTID EVENT.CONCERTID; INNER JOIN BOOKING * Fehler bei Zeile 7: ORA-00933: SQL-Befehl nicht ordnungsgemäß beendet –

+0

Ich bekomme einen SQL-Befehl nicht ordnungsgemäß beendet Fehler ? –

Antwort

0

Der Fehler liegt daran, dass Sie die exists-Anweisungen in die Auswahlliste einfügen, in der sie in der WHERE-Bedingung hätte sein sollen. Habe ich es, wie unten

SELECT 
    CUSTOMER.CUSTOMERID, 
    CUSTOMER.CUSTOMERNAME, 
    EVENT.EVENTLOCATION 
FROM CUSTOMER 
    INNER JOIN BOOKING 
     ON BOOKING.CUSTOMERID = CUSTOMER.CUSTOMERID 
    INNER JOIN EVENT 
     ON EVENT.EVENTID=BOOKING.EVENTID 
    INNER JOIN CONCERTS 
     ON CONCERTS.CONCERTID=EVENT.CONCERTID; 
WHERE NOT EXISTS 
(
    SELECT 1 FROM EVENT.EVENTLOCATION WHERE EVENTLOCATION ='LONDON 02' 
) 
0

Das erste, was, es besser ist, Ihre „WHERE-Klausel“ zu setzen, nachdem alle verbindet. Zweitens Ihre "SELECT" Klausel

SELECT * FROM EVENT.EVENTLOCATION AND EVENTLOCATION ="LONDON 02" 

ist falsch. Die Syntax ist:

SELECT * FROM TABLE_NAME WHERE YOUR_CONDITIONS 

so vielleicht so etwas wie folgt aus:

SELECT CUSTOMER.CUSTOMERID, 
CUSTOMER.CUSTOMERNAME, 
FROM CUSTOMER 
LEFT OUTER JOIN BOOKING 
ON BOOKING.CUSTOMERID = CUSTOMER.CUSTOMERID 
LEFT OUTER JOIN 
(SELECT * FROM EVENT WHERE EVENTLOCATION="LONDON 02") AS LONDON_EVEN 
ON EVENT.EVENTID=BOOKING.EVENTID 
INNER JOIN CONCERTS 
ON CONCERTS.CONCERTID=EVENT.CONCERTID 
WHERE EVENT.EVENTID IS NULL;