【问题标题】:SELECT with temporary column with value based on other columnSELECT 临时列的值基于其他列
【发布时间】:2016-05-09 12:20:11
【问题描述】:

我有 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 字段的自引用外键。

我需要进行一个查询,该查询将使用从id 字段计算的“managerName”动态添加列,该字段将包含连接的名字和姓氏。

以下是我尝试过的(简化的)查询。问号是由mysql driver(在nodejs中)填充的占位符:

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

我知道WHERE managerId = id 是要查看的地方,但老实说,我不知道放置什么条件才能匹配正确的值。

有人可以帮忙吗?

编辑 万一有人偶然发现同样的事情,我找到了helpful article。甚至例子也很相似。

【问题讨论】:

    标签: mysql node.js


    【解决方案1】:

    LEFT JOIN 是您的朋友。 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;
    

    【讨论】:

    • 通过'e'和'm'你引用两个不同的表吗?这一切都在一张桌子上。
    • @Ketus - 是的,我加入了同一张桌子,但我在查询中忘记了“m”。请再试一次
    • 感谢您的回复。我是这种语法的新手,我没有看到错误,但 Sql Workbench 在“LEFT JOIN employee m ON e.managerId = m.id”附近返回语法错误
    • 请在我保存完成之前看看你是否复制了它
    • 当然,我刷新了页面以确保。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 2015-07-16
    • 2019-10-09
    • 2019-01-10
    • 1970-01-01
    • 2018-02-19
    • 2011-10-13
    相关资源
    最近更新 更多