gpt4 book ai didi

mysql - 在 SQL 中按名称替换 2 个 ID

转载 作者:行者123 更新时间:2023-11-29 19:37:07 25 4
gpt4 key购买 nike

我有 2 个表格,如下所示:

Table 1

Table 2

我想做的是,我想用表 2 中的名字和姓氏替换表 1 中的change_builder ID。此外,我想对表 2 中的change_manager_ID 执行相同的操作(将其替换为表 2 中的名字和姓氏)

我的查询如下所示:

SELECT a.change_number, a.title, change_manager_id,change_builder_id, concat(users.first_name,' ', users.last_name) as Manager_Name, concat(users.first_name,' ', users.last_name) as Builder_Name,

(CASE
WHEN a.change_state_id = '128' THEN 'In Progress'
WHEN a.change_state_id = '127' THEN 'Approved'
WHEN a.change_state_id = '125' THEN 'Pending'
WHEN a.change_state_id = '124' THEN 'Requested'

END) AS Change_State

FROM change_item as a
LEFT JOIN users
ON a.change_manager_id = users.id


WHERE a.change_state_id = 128
OR a.change_state_id = 124
OR a.change_state_id = 125
OR a.change_state_id = 127

此操作的输出是更改经理的姓名和 ID,但我也想对构建器执行相同的操作。

我被困住了,任何帮助或提示将不胜感激。

最佳答案

您似乎忘记了可以将一个表两次连接到同一个其他表 - 每个连接描述不同的关系。良好的实践要求您为每个连接子句提供一个良好的关联名称来描述关系的角色。

并且,请为正确的类型使用正确的文字。

不是一次change_state_id = '128'(字符串),然后是change_state_id = 124(数字)。隐式转换速度很慢,并且会影响数据质量。

我使用了 IN () 子句而不是一堆 OR-s:

SELECT 
a.change_number
,a.title
,change_manager_id
,change_builder_id
,CONCAT (mgr.first_name,' ',mgr.last_name) AS Manager_Name
,CONCAT (bld.first_name,' ',bld.last_name) AS Builder_Name
,CASE
WHEN a.change_state_id = 128 THEN 'In Progress'
WHEN a.change_state_id = 127 THEN 'Approved'
WHEN a.change_state_id = 125 THEN 'Pending'
WHEN a.change_state_id = 124 THEN 'Requested'
END AS Change_State
FROM change_item AS a
LEFT JOIN users AS mgr -- join as manager
ON a.change_manager_id = mgr.id
LEFT JOIN users AS bld -- join as builder
ON a.change_builder_id = bld.id
WHERE a.change_state_id IN(128,124,125,127)
;

关于mysql - 在 SQL 中按名称替换 2 个 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41519681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com