我有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
答案 0 :(得分:0)
重新JOIN
表oc_user
两次使用不同的别名creators
和executers
,如下所示:
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