Mysql

為什麼我不斷得到列名對於 MySQL 上的左連接不明確?

  • August 6, 2022
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欄位更改為IdNumand IdInsurance

您有兩列稱為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子句中顯式指定表名(或該表的別名)。無論如何,這樣做也是一種好習慣,因此看到您的查詢的人會立即知道每列屬於哪個表。

引用自:https://dba.stackexchange.com/questions/315293