在同一查询中两次获取UserID的显示名称

时间:2018-02-27 10:55:35

标签: mysql

我有一个名为Users的表:

const arr = [
 {
  id:2,
  count:23,
  numberOfType:34
},
{
  id:2,
  count2:53,
  numberOfType2:34
},
{
  id:2,
  count3:53,
  numberOfType3:34
},
{
  id:2,
  count:23,
  numberOfType:34
},
{
  id:21,
  count2:53,
  numberOfType2:34
},
{
  id:21,
  count3:53,
  numberOfType3:34
},
]

const newArr = arr.reduce((acc, newObj) => {
   let index = acc.findIndex(obj => obj.id === newObj.id);
   if(index > -1) {
      acc = [...acc.slice(0, index), {...acc[index], ...newObj}, ...acc.slice(index + 1)]
   }
   else {
      acc.push(newObj);
   }
   return acc
}, [])
console.log(newArr)

还有一个名为Tasks的表:

UserID  |  DisplayName
----------------------
2       |  Jack 
3       |  Jill

在这里,用户可以为彼此或自己设置任务。

我的查询如下:

TaskID  |  UserID  |  UserForID
--------------------------------
1       |  2       |  3
2       |  3       |  2
3       |  3       |  3

现在使用SELECT * FROM Tasks INNER JOIN Users ON Tasks.UserForID=Users.UserID 获取任务所针对的用户的显示名称,但如何获取发布任务的用户的显示名称?

1 个答案:

答案 0 :(得分:2)

为两个用户加入相同的用户表。当您第一次加入时,您基于 UserForID 加入了这就是为什么您只获得ForUser,现在如果您加入

SELECT t.TaskID, u.DisplayName as ForUser, tu.DisplayName as FromUser
FROM Tasks t
INNER JOIN Users u ON t.UserForID=u.UserID
INNER JOIN Users tu ON tu.UserID=t.UserID

密钥FromUser将包含创建任务的用户的名称

enter image description here