2016-11-02 6 views
-1

Also versuche ich, die Nummer und den Namen jedes Kunden aufzulisten, der entweder durch den Verkaufsrepräsentanten 65 vertreten wird oder der momentan Bestellungen in der Datei hat, oder beides, und ich bekomme immer einen Fehler. Ich habe sogar die Lösung im Buch überprüft und mein Code sieht genauso aus. Was sagt mir dieser Fehler? Ich habe die Lösung, die das Buch gibt, hinzugefügt. SolutionIch kann den Fehler in meinem SQL-Code nicht finden?

mysql> SELECT CUSTOMER_NUM, CUSTOMER_NAME 
    -> FROM CUSTOMER 
    -> WHERE REP_NUM+'65' 
    -> UNION 
    -> SELECT C.CUSTOMER_NUM, CUSTOMER_NAME 
    -> FROM CUSTOMER C, ORDERS 0 
    -> WHERE C.CUSTOMER_NUM=0.CUSTOMER_NUM; 
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0 
WHERE C.CUSTOMER_NUM=0.CUSTOMER_NUM' at line 6 
+0

In Zukunft * bitte * uns sagen *, was der Fehler sagt *. – ceejayoz

+0

Es war unter dem Code – Steberz

Antwort

2

Sie haben zero als Aliasname, der Grund für Fehler ist. Zahlen dürfen nicht mit Alias ​​versehen werden. Ich glaube, Sie o statt zero

SELECT CUSTOMER_NUM, CUSTOMER_NAME 
    FROM CUSTOMER 
    WHERE REP_NUM = '65' -- also here `=` should be used instead of `+` 
    UNION 
    SELECT C.CUSTOMER_NUM, CUSTOMER_NAME 
    FROM CUSTOMER C, ORDERS o 
    WHERE C.CUSTOMER_NUM=o.CUSTOMER_NUM; 
+1

Danke! Ich war verwirrt, weil die gelieferte Lösung wirklich wie eine 0 aussah und kein o – Steberz

1

Verwendet EXISTS:

select c.* 
from customer c 
where rep_num = 65 or 
     exists (select 1 from orders o where c.customer_num = o.customer_num); 

Ihr spezifisches Problem ist, dass Sie eine Zahl als Tabellen-Alias ​​verwendet haben. Du solltest wirklich einen Brief benutzen.

Aber auch andere Dinge in den Sinn kommen:

  • union ist eine Ressource Schwein, weil es Overhead entstehen Duplikate zu entfernen. Das ist für diese Abfrage nicht notwendig.
  • Zahlen wie 65 sollten nicht in einfache Anführungszeichen eingeschlossen werden - diese sollten für Strings und Datumsangaben verwendet werden.
  • haben Sie eine +, wo = aufgerufen wird.
1

Ihre Syntax prüfen, es ist = '65' nicht + '65'

mysql> SELECT CUSTOMER_NUM, CUSTOMER_NAME 
-> FROM CUSTOMER 
-> **WHERE REP_NUM+'65**' 
-> UNION 
-> SELECT C.CUSTOMER_NUM, CUSTOMER_NAME 
-> FROM CUSTOMER C, ORDERS 0 
-> WHERE C.CUSTOMER_NUM=0.CUSTOMER_NUM; 
Verwandte Themen