mysql - 带有基于其他列的值的临时列的 SELECT

标签 mysql node.js

我有 mysql 表,其架构类似于下面的 json 数组。

[
    { "id": 1, "firstName": "Charles Montgomery", "lastName": "Burns", "managerId": 12},
    { "id": 2, "firstName": "Bart", "lastName": "Simpson", "managerId": 1},
    { "id": 3, "firstName": "Marge", "lastName": "Simpson", "managerId": 1},
    { "id": 4, "firstName": "Lisa", "lastName": "Simpson", "managerId": 1},
    { "id": 5, "firstName": "Maggie", "lastName": "Simpson", "managerId": 1},
    { "id": 6, "firstName": "Homer", "lastName": "Simpson", "managerId": 4},
    { "id": 7, "firstName": "Ned", "lastName": "Flanders", "managerId": 4},
    { "id": 8, "firstName": "Krusty", "lastName": "The Clown", "managerId": 2},
    { "id": 9, "firstName": "Waylon", "lastName": "Smithers", "managerId": 2},
    { "id": 10, "firstName": "Ralph", "lastName": "Wiggum", "managerId": 5},
    { "id": 11, "firstName": "Itchy", "lastName": "", "managerId": 5},
    { "id": 12, "firstName": "Comic Book Guy", "lastName": "", "managerId": 4}
]

managerId 字段是 id 字段的自引用外键。

我需要进行一个查询,该查询将动态添加带有“managerName”的列,该列是根据 id 字段计算得出的,该字段将保存连接的名字和姓氏。

下面是我尝试过的(简化的)查询。问号是占位符,填充为 mysql driver (在 Node.js 中):

SELECT * , 
(SELECT CONCAT_WS(' ', firstName, lastName) FROM employee WHERE managerId = id ) as managerName
FROM employee WHERE employee.id = ?;

我意识到这个 WHERE managerId = id 是值得一看的地方,但老实说,我不知道要放置什么条件来匹配正确的值。

有人可以帮忙吗?

编辑 如果有人偶然发现同样的事情,我发现 helpful article 。甚至例子都是相似的。

最佳答案

LEFT JOIN 是你的 friend 。 tra 使用这样的查询:

SELECT 
    e.*,
    CONCAT_WS(' ', m.firstName, m.lastName) AS managerName
FROM employee e WHERE e.employee.id = ?
LEFT JOIN  employee m ON e.managerId = m.id;

关于mysql - 带有基于其他列的值的临时列的 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37115677/

相关文章:

mysql - MySQL 存储过程出现奇怪的性能问题,将许多 INSERT 插入到临时表中

mysql - MySQL 中良好的一对多关系实践

mysql - 基于列值的动态列别名

mysql - 为什么在mysql中编写存储过程时不使用__FileName

mysql - 几个异步函数后的一个响应

node.js - npm 不会使用 Laravel/Homestead 安装 package.json 文件中列出的软件包

mysql - 如何选择列的不同前缀子字符串?

javascript - 如何使用 typescript 处理 json 对象

node.js - Nodejs 日期格式模块引用

javascript - Protractor:是否可以同时使用多个.get()?