php - 1060 SQL 查询错误

标签 php mysql sql phpmyadmin

我正在尝试运行一个查询,我会将其从具有多个搜索选项的 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)
);

最佳答案

问题就在这里

SELECT *  FROM EMPLOYEE, DEPARTMENT, LOCATION

EMPLOYEEDEPARTMENT都有Mgr_ssn列。您需要指定 Mgr_ssn 来自的表,例如

SELECT EMPLOYEE.Mgr_ssn AS `EMP_Mgr_ssn`,
       DEPARTMENT.Mgr_ssn AS `DEP_Mgr_ssn`,
       .....
FROM EMPLOYEE, DEPARTMENT, LOCATION

别名也可以帮助您解决这个问题。

所以完整的查询是

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

关于php - 1060 SQL 查询错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13559016/

相关文章:

php - Laravel 使用ajax get请求清除 session 数据

php - fopen 在子目录上返回 false

sql - 帮助建立数据库

具有多个 "for each"的 MySQL 查询

sql - 根据最新日期和每个用户获取最新的 sql 行

mysql - 选择链接 MYSQL 上两个查询的结果

PHP - 如何向请求发送 200 代码响应并转发它?

php - 如何使西里尔字符大写?

mysql - 在触发器导致 View 中使用的表插入后,如何更新 MYSQL View

元组的 SQL 重复数据删除列表