首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JSP + Servlet + MySQL 報錯:Not unique table/alias: 'emp' 怎麼解?

     編輯:程式設計綜合問答

錯誤訊息

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Not unique table/alias: 'emp'

直接原因:SQL 查詢中同一個表別名重複使用

MySQL 發現同一個查詢裡,同一張表被多次引用卻使用了相同的別名,或是 JOIN 時同一張表出現多次但未給予不同別名。例如:

-- ❌ 錯誤:emp 別名重複
SELECT * FROM emp e JOIN emp e ON e.deptno = e.deptno;

-- ✅ 正確:給不同別名
SELECT * FROM emp e1 JOIN emp e2 ON e1.deptno = e2.deptno;

常見觸發情境

  • 自我關聯查詢:員工表關聯員工表找主管,必須用 e1、e2 不同別名。
  • 同一張表在子查詢與主查詢都出現,別名衝突。
  • 動態拼接 SQL 時,邏輯錯誤導致同一張表被加入兩次且別名相同。

解決步驟

  1. 貼出完整 SQL 語句(含 Java 代碼中拼接的字串),才能精準定位。
  2. 檢查所有 FROM、JOIN、子查詢中 emp 出現的次數與別名。
  3. 為每一次引用分配唯一別名:emp e1、emp e2、emp m(主管)、emp s(下屬)等。
  4. 若用 ORM(Hibernate/MyBatis),檢查映射檔或註解中的 entity-name、table、alias 設定。

範例修正

-- 原錯誤 SQL(假設)
String sql = "SELECT e.ename, m.ename AS mgr_name " +
             "FROM emp e JOIN emp e ON e.mgr = e.empno";  // 別名重複

-- 修正後
String sql = "SELECT e.ename, m.ename AS mgr_name " +
             "FROM emp e JOIN emp m ON e.mgr = m.empno";  // e=員工, m=主管

給提問者的建議

**「我的 SQL 沒問題」** 是最危險的預設。請直接在問題中貼出完整的 SQL 字串(含 Java 變數拼接部分),或是在資料庫客戶端直接執行該 SQL 觀察報錯位置。只要看到 Not unique table/alias,100% 是別名重複,改給唯一別名即可解決。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved