我正在尝试运行查询,我将从具有多个搜索选项的from转变为mySQL查询。这是我在myPHPadmin
中测试的查询SELECT Fname, Minit, Lname, Address, Hourly, Sname, Saddress, Dno
FROM (SELECT *
FROM EMPLOYEE, DEPARTMENT, LOCATION
WHERE EMPLOYEE.Dno = DEPARTMENT.Dnumber AND
LOCATION.Store_num = DEPARTMENT.Store_num AND
(Fname='100' OR Lname='100'
OR LOCATION.Store_num ='100' OR Dno='100')) X
所有的OR语句都会变成'?'在mySQL中,所以现在我使用100只能用于Store_num。因此,这应该显示在该商店工作的员工列表。
但是,我得到的错误是:#1060 - 重复列名称' Mgr_ssn'
这是我的表格,不确定为什么它们没有正确合并。
CREATE TABLE EMPLOYEE
( Fname VARCHAR(15) not null,
Minit CHAR,
Lname VARCHAR(15) not null,
Ssn CHAR(9) not null,
Bdate DATE,
Address VARCHAR(30),
Hourly DECIMAL(5,2),
Mgr_ssn CHAR(9),
Dno INT not null,
Start_date DATE,
Phone CHAR(10),
PRIMARY KEY (Ssn),
FOREIGN KEY (Mgr_ssn) REFERENCES EMPLOYEE(Ssn),
FOREIGN KEY (Dno) REFERENCES DEPARTMENT(Dnumber) );
CREATE TABLE DEPARTMENT
( Dname VARCHAR(15) not null,
Dnumber INT not null,
Mgr_ssn CHAR(9) not null,
Mgr_start_date DATE,
Phone CHAR(10),
Store_num INT not null,
PRIMARY KEY (Dnumber, Store_num),
UNIQUE (Dname),
FOREIGN KEY (Mgr_ssn) REFERENCES EMPLOYEE(Ssn),
FOREIGN KEY (Store_num) REFERENCES LOCATION(Store_num)
);
CREATE TABLE LOCATION
( Store_num INT NOT NULL,
Sname VARCHAR(15) NOT NULL,
Saddress VARCHAR(30) NOT NULL,
PRIMARY KEY (Store_num),
UNIQUE (Saddress)
);
答案 0 :(得分:1)
问题出在这里
SELECT * FROM EMPLOYEE, DEPARTMENT, LOCATION
表EMPLOYEE
和DEPARTMENT
都有Mgr_ssn
列。您需要指定Mgr_ssn
来自的表格,ex
SELECT EMPLOYEE.Mgr_ssn AS `EMP_Mgr_ssn`,
DEPARTMENT.Mgr_ssn AS `DEP_Mgr_ssn`,
.....
FROM EMPLOYEE, DEPARTMENT, LOCATION
alias
也可以帮助您解决问题。
所以完整的查询将是
SELECT Fname, Minit, Lname, Address, Hourly, Sname, Saddress, Dno
FROM
(
SELECT LOCATION.*,
Employee.Mgr_ssn AS `EMP_Mgr_ssn`,
DEPARTMENT.Mgr_ssn AS `DEP_Mgr_ssn`,
Employee.Fname,
Employee.Minit,
Employee.Lname,
Employee.Address,
Employee.Hourly,Employee.Dno
FROM EMPLOYEE, DEPARTMENT, LOCATION
WHERE EMPLOYEE.Dno = DEPARTMENT.Dnumber AND
LOCATION.Store_num = DEPARTMENT.Store_num AND
(Fname='100' OR Lname='100'
OR LOCATION.Store_num ='100' OR Dno='100'
)
) X
但是此查询也可以,因为您没有Mgr_ssn
列
SELECT Fname, Minit, Lname, Address, Hourly, Sname, Saddress, Dno
FROM
(
SELECT LOCATION.*,
Employee.Fname,
Employee.Minit,
Employee.Lname,
Employee.Address,
Employee.Hourly,Employee.Dno
FROM EMPLOYEE, DEPARTMENT, LOCATION
WHERE EMPLOYEE.Dno = DEPARTMENT.Dnumber AND
LOCATION.Store_num = DEPARTMENT.Store_num AND
(Fname='100' OR Lname='100'
OR LOCATION.Store_num ='100' OR Dno='100'
)
) X
答案 1 :(得分:0)
您的两个表包含'Mgr_ssn'列。要解决上述问题,请使用以下查询更改其中一列的名称
选择employee.Mgr_ssn为'give_any_name'.....