我有两个具有以下结构的表:
TASK_ID | TASK_CREATOR_ID | TASK_ASSIGNEE_ID | CREATED_DATE
--------+--------------------+---------------------+------------------------
1 1 2 2014-09-24 12:00:00
2 2 1 2014-09-25 12:00:00
USER_ID NAME PHONE_NUMBER
------------------------------------------
1 ABHISEK 9804XXXXXX
2 SMITH 9038XXXXXX
我需要TASK CREATOR (TASK_CREATOR_ID)
的名称和TASK_ASSIGNEE(TASK_ASSIGNEE_ID)
以及TASK_MASTER
USER_MASTER)
名称
我试过这段代码:
select TM.TASK_ASSIGNEE,TM.TASK_CREATOR,
TM.CREATED_DATE,UM.FIRST_NAME,UM.FIRST_NAME,UM.PHONE_NUMBER
FROM TASK_MASTER TM
INNER JOIN USER_MASTER UM
ON TM.TASK_ASSIGNEE_ID=UM.USER_ID
AND TM.TASK_CREATOR_ID=UM.USER_ID
where TASK_ID='1'
但它不起作用。
答案 0 :(得分:1)
你需要两个连接:
select TM.TASK_ASSIGNEE, TM.TASK_CREATOR, TM.CREATED_DATE,
UMA.FIRST_NAME, UMA.FIRST_NAME, UMA.PHONE_NUMBER,
UMC.FIRST_NAME, UMC.FIRST_NAME, UMC.PHONE_NUMBER,
FROM TASK_MASTER TM LEFT JOIN
USER_MASTER UMA
ON TM.TASK_ASSIGNEE_ID = UMA.USER_ID LEFT JOIN
USER_MASTER UMC
ON TM.TASK_CREATOR_ID = UMC.USER_ID
where TM.TASK_ID = '1';
我也将连接切换为Left Join
s。如果其中一行没有匹配项,则任务仍会显示。
答案 1 :(得分:1)
您需要为创作者进行两次连接,为受让人进行一次连接。 id:s都不匹配。像这样:
select
TM.TASK_ASSIGNEE,
TM.TASK_CREATOR,
TM.CREATED_DATE,
ASSIGNEE.FIRST_NAME,
ASSIGNEE.FIRST_NAME,
ASSIGNEE.PHONE_NUMBER,
CREATOR.FIRST_NAME,
CREATOR.FIRST_NAME,
CREATOR.PHONE_NUMBER
FROM
TASK_MASTER AS TM
INNER JOIN USER_MASTER AS ASSIGNEE
ON TM.TASK_ASSIGNEE_ID=ASSIGNEE.USER_ID
INNER JOIN USER_MASTER AS CREATOR
ON TM.TASK_CREATOR_ID=CREATOR.USER_ID
where
TASK_ID='1'
答案 2 :(得分:0)
在您的加入条件中,您规定受让人和创建者必须与用户ID相同。在您的示例表中,两个任务都没有相同的受让人或创建者。所以你什么也得不回来
答案 3 :(得分:0)
在加入2个表格中只放置1个cond。这样的事情: -
SELECT
TM.TASK_ASSIGNEE,
TM.TASK_CREATOR,
TM.CREATED_DATE,
UM.FIRST_NAME,
UM.FIRST_NAME,
UM.PHONE_NUMBER
FROM
TASK_MASTER TM
INNER JOIN USER_MASTER UM
ON TM.TASK_ASSIGNEE_ID=UM.USER_ID
WHERE
TASK_ID='1';
这可能会对你有所帮助。
答案 4 :(得分:0)
您的查询会尝试查明是否有为自己创建任务的任务创建者,您需要再添加一个联接来完成此任务:
select
TM.TASK_CREATOR,
UM1.FIRST_NAME as creator_first_name,
UM1.PHONE_NUMBER as creator_phone_number,
TM.TASK_ASSIGNEE,
UM2.FIRST_NAME as assignee_first_name,
UM2.PHONE_NUMBER as assignee_phone_number,
TM.CREATED_DATE,
FROM
TASK_MASTER TM
INNER JOIN USER_MASTER UM1
ON TM.TASK_CREATOR_ID=UM1.USER_ID
INNER JOIN USER_MASTER UM2
ON TM.TASK_ASSIGNEE_ID=UM1.USER_ID
where
TASK_ID='1'