使用不同的名称获取结果两次

时间:2012-11-05 10:57:44

标签: mysql select double rename


我有1个表,其任务名为opentask:
columns:id,title,description,expires,creator_id,creator_name,executer_id,executer_name,priority_id,status_id
1个用户命名的表用户:
列:user_id,用户名
我想要的是创建一个查询,其中将存在来自opentask表的所有列,其中executer_id将等于user表的user_id并且creator_id将再次等于user_id。这会产生混淆,因为第一个等式排除了第二个。

所以我需要以某种方式创建一个查询,其中我将包含执行者的用户名,其中包含“opentask.executer_id = user_user_id”和同时我将为创建者再次包含用户名(例如“opentask.executer_id = user_user_id”)所以我试试这个,当然我知道这是遗失了什么,你能帮忙吗?

  

SELECT DISTINCT id,title,description,expires,creator_id,executer_id,oc_opentask.priority_id,oc_opentask.status_id,priority_name,status_name,user_id,username,(SELECT username FROM oc_opentask,oc_user WHERE oc_opentask.creator_id = oc_user.user_id)AS username2 FROM oc_opentask,oc_opentask_priority,oc_user,oc_opentask_status WHERE oc_opentask.priority_id = oc_opentask_priority.priority_id AND oc_opentask.executer_id = oc_user.user_id AND oc_opentask.status_id = oc_opentask_status.status_id ORDER BY oc_opentask.expires DESC

1 个答案:

答案 0 :(得分:0)

重新JOINoc_user两次使用不同的别名creatorsexecuters,如下所示:

SELECT DISTINCT 
  t.*, 
  creators.user_name 'Creator name',
  executers.username 'Executor name', 
  tp.priority_name, 
  s.status_name
FROM oc_opentask t 
INNER JOIN oc_opentask_priority tp        ON t.priority_id = tp.priority_id
INNER JOIN oc_user              executers ON t.executer_id = executes.user_id
INNER JOIN oc_user              creators  ON t.creator_id  = creators.user_id
INNER JOIN oc_opentask_status   s         ON t.status_id   = s.status_id
ORDER BY t.expires DESC