Mysql
為什麼我不斷得到列名對於 MySQL 上的左連接不明確?
CREATE DATABASE IF NOT EXISTS EdocodeDB2; USE EdocodeDB2; -- create CREATE TABLE EMPLOYEE ( IdNum int, Name varchar(255), PRIMARY KEY(IdNum) ); -- insert INSERT INTO EMPLOYEE VALUES (1, 'Kosuke'); INSERT INTO EMPLOYEE VALUES (2, 'Keisuke'); INSERT INTO EMPLOYEE VALUES (3, 'Icchy'); CREATE TABLE INSURANCE ( IdInsurance int, Name varchar(255), Employee_id int, PRIMARY KEY(IdInsurance) ); -- insert INSERT INTO INSURANCE VALUES (1, 'CAR', 1); INSERT INTO INSURANCE VALUES (2, 'CAR', 3); -- left join SELECT IdNum, Name FROM EMPLOYEE LEFT JOIN INSURANCE ON EMPLOYEE.IdNum = INSURANCE.Employee_id;
欄位列表中的“名稱”列不明確,但我清楚地說
FROM EMPLOYEE
我不得不將
Id
欄位更改為IdNum
andIdInsurance
。
您有兩列稱為
Name
,一列在表中EMPLOYEE
,另一列在表中INSURANCE
。MySQL如何知道你想從哪個表中獲取列?您應該指定表名以消除歧義:
SELECT EMPLOYEE.IdNum, INSURANCE.Name -- Or EMPLOYEE.Name if you mean the column in the EMPLOYEE table FROM EMPLOYEE LEFT JOIN INSURANCE ON EMPLOYEE.IdNum = INSURANCE.Employee_id;
”但我清楚地說
FROM EMPLOYEE
“ - 這不是 MySQL 的工作方式。子句中的第一個表FROM
不會自動暗示您所指的列的實例。FROM
當/子句中的多個表中存在同名的列時,JOIN
必須在SELECT
子句中顯式指定表名(或該表的別名)。無論如何,這樣做也是一種好習慣,因此看到您的查詢的人會立即知道每列屬於哪個表。