我有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的管理员的名字和姓氏,但我也想对构建器进行同样的操作。
我被困住了,任何帮助或暗示将不胜感激。
似乎您忘记了可以将一个表两次连接到同一张其他表-每个联接描述了不同的关系。优良作法要求您为每个join子句赋予一个好的相关性名称,以描述关系的作用。
并且,请为正确的类型使用正确的文字。
不是一次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)
;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句