2016-11-02 57 views
-1

所以我試圖列出每個客戶的數量和名稱,或者由銷售代表65或目前有文件訂單,或兩者,並且我不斷收到錯誤。我甚至在書中檢查瞭解決方案,我的代碼看起來是一樣的。這個錯誤告訴我什麼?我附上了本書給出的解決方案。 Solution我無法找到我的SQL代碼中的錯誤?

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

在未來,*請*告訴我們錯誤說* *什麼。 – ceejayoz

+0

它是根據代碼 – Steberz

回答

2

你有zero作爲別名是錯誤的原因。數字不允許別名。我想,而不是你ozero

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

謝謝!我很困惑,因爲提供的解決方案看起來像0而不是o – Steberz

1

用途EXISTS

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

你的具體問題是,你已經使用了數作爲表的別名。你應該真的使用一封信。

然而,其他的事情浮現在腦海中:

  • union是一個資源豬,因爲它會帶來的開銷去除重複。這不是這個查詢所必需的。
  • 數字(如65)不應包含在單引號中 - 這些應該用於字符串和日期。
  • 你有一個+其中=被調用。
1

檢查你的語法,這是'65' =不+ '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; 
相關問題