mysql - 内连接多个表获取名称而不是 ID

标签 mysql

我有4张 table

Table incidences-employees
---------------------------
idIncidenceEmployee PK
idEmployee FK (employee.idemployee)
idMasterIncidence FK (incidence-master.idIncidence)
createdby FK (user-employee.idMongoUser)
authorizedBy FK (user-employee.idMongoUser)

Table incidence-master
---------------------------
idIncidence PK
name

TAble user-employee
--------------------------
idMongoUser PK
idEmployee

Table EMployee
-------------------------
idEmployee Pk
name
lastName

我执行此查询

SELECT employee.name, incidences-master.name, incidences-employees.* 
  FROM employee-incidences 
    INNER JOIN employee ON employee.idEmployee = employee-incidences.idEmployee 
    INNER JOIN incidences-master ON incidences-master.idIncidence = employee-incidences.idIncidenceEmployee

我明白了

Employee name | Incidence name | idIncidenceEmployee | idEmployee | idMasterIncidence | createdby | authorizedBy 
John Doe      | Incidence Name |               1     |    1       |                 5 |    abc123 | abc123

但是在创建并授权时,我得到一个 ID,abc123,我想要的是将 id 与名称相匹配,该 id 位于表 user-employee

    Table user-employee          Table Employee
   ----------------------    -   -------------------
    idMongoUser -> abc123        idEmployee -> 1
    idemployee -> 1              Name -> John Doe

我希望显示 John Doe,而不是 ID。

最佳答案

你可能想要这样的东西:

SELECT employee.name as employeeName, incidences-master.name as incidenceName, e1.name as createdBy, e2.name as authorisedBy
FROM employee-incidences 
INNER JOIN incidences-master ON incidences-master.idIncidence = employee-incidences.idIncidenceEmployee
INNER JOIN employee ON employee.idEmployee = employee-incidences.idEmployee
INNER JOIN user-employee ue1 on ue1.idMongoUser = employee-incidences.createdBy
INNER JOIN employee e1 on e1.idEmployee = ue1.idEmployee
INNER JOIN user-employee ue2 on ue2.idMongoUser = employee-incidences.AuthorizedBy
INNER JOIN employee e2 on e2.idEmployee = ue2.idEmployee

如果存在createdBy或authorizedBy可能为空或null的情况,那么我建议使用Left Joins而不是Inner Joins

关于mysql - 内连接多个表获取名称而不是 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39901910/

相关文章:

mysql - 删除表的子行

mysql - 安装 xampp 并将其与现有 MySQL 服务器集成

mysql - 在 CREATE TABLE 中使用完全限定表名的任何方式

php - INSERT 语句是否有等效的 PDO::ATTR_ORACLE_NULLS ?

php - MySQL + PHP : Select all results from one table for each result of another

MySQL 触发器 - 我哪里出错了

MySql: "SHOW CREATE TABLE"不适用于名为 "x-..."的表?

mysql - 如何根据同一月份值的另一个 SELECT 的值进行选择

mysql - 对包含多行(250m+ 行)的表进行选择查询

Mysql邻接表模型,我的查询结果不是我想要的