所有不同的键

sxpgvts3  于 2021-07-24  发布在  Java
关注(0)|答案(4)|浏览(178)

最初我一直在尝试合并 users_role_change_log 带的表格 users_schedule_log . 第一个只有用户id,第二个只有全名。所以没有明确的打击。
我试着介绍第三张table把这两张table绑在一起- users table。有users id,但全名分为两列第一个\u name和第二个\u name。所以这会使事情更加复杂。不是我的设计。
希望我能即兴把主站的名字和姓氏联系起来 users 表,并将其作为左联接的相关参数传递。

SELECT r.*,CONCAT(first_name, ' ', last_name) AS u.name 
FROM `users_role_change_log` r 
LEFT JOIN users u ON r.id = u.id 
LEFT JOIN users_schedule_log e ON u.name = e.name

但这行不通。
有什么建议吗?
编辑:#1添加表示例:a)用户#角色#更改#日志

id user_id role time_changed
34   60      19  '2020-07-05 05:30:00'

b) 用户\计划\日志

id name       shift_start           shift_end
9  'John Doe' '2020-07-05 07:00:00' '2020-07-05 15:00:00'

c) 用户

id first_name last_name
60 'John'        'Doe'

d) 我想要的结局

a)user_id   b)name      a)role a)time_changed b)shift_start b)shift_end
60         'John Doe'    19    ...
eagi6jfj

eagi6jfj1#

必须从开始连接 users 左连接 users_role_change_log 以及 users_schedule_log 在正确的列上:

SELECT u.id, CONCAT(u.first_name, ' ', u.last_name) name, 
       r.role, r.time_changed, s.shift_start, s.shift_end 
FROM users u 
LEFT JOIN users_role_change_log r ON r.user_id = u.id 
LEFT JOIN users_schedule_log s ON s.name = CONCAT(u.first_name, ' ', u.last_name)

请看演示。

ikfrs5lh

ikfrs5lh2#

你可以这样尝试:

SELECT *
FROM `users_role_change_log` r 
LEFT JOIN users u ON r.id = u.id 
LEFT JOIN users_schedule_log e ON CONCAT(u.first_name, ' ', u.last_name) = e.name

或者这样:

WITH user_connector as (select CONCAT(first_name, ' ', last_name) as name, id from users)
SELECT *
FROM `users_role_change_log` r 
LEFT JOIN user_connector u ON r.id = u.id 
LEFT JOIN users_schedule_log e ON u.name = e.name

当然你应该把星号改成你想要选择的字段。

bvk5enib

bvk5enib3#

您可以为此使用子查询。希望能帮上忙,我的朋友:))

create table users_role(id int, user_id int, role int, time_changed datetime)
create table users_schedule(id int, name varchar(20), shift_start datetime, shift_end datetime)
create table users(id int, first_name varchar(20), last_name varchar(20))

insert into users_role
values(34, 60, 19, '2020-07-05 05:30:00')

insert into users_schedule
values(9, 'John Doe', '2020-07-05 07:00:00', '2020-07-05 15:00:00')

insert into users
values(60, 'John', 'Doe')

-----
Select *
FROM (SELECT r.*, CONCAT(u.first_name, ' ', u.last_name) AS Name 
FROM users_role r 
LEFT JOIN users u ON r.user_id = u.id )as t
LEFT JOIN users_schedule e ON t.Name = e.name
lymnna71

lymnna714#

在这把小提琴里找到答案。您需要为users表构造一个子查询 CONCAT 列,然后继续 JOIN .
您可能需要考虑数据库模式,因为表 users_schedule_log 可以使用用户的id而不是他的名字(同名问题)。

SELECT r.user_id,  u.name, r.role, r.time_Changed, u.shift_start, u.shift_end
FROM users_role_change_log AS r
LEFT JOIN (SELECT id, CONCAT(first_name,' ',last_name) AS name FROM users)A 
ON r.user_id = A.id
LEFT JOIN users_schedule_log AS u
ON u.name = A.name

相关问题