Sql 对具有条件的两个表执行内部联接操作会产生不同的结果
我有两个表,结构如下: 表1:任务管理器 表2:用户/主机 我需要任务创建者的名称任务创建者ID和任务指派者的名称任务指派者ID来自任务主机和用户主机 我尝试了以下代码:Sql 对具有条件的两个表执行内部联接操作会产生不同的结果,sql,sql-server,Sql,Sql Server,我有两个表,结构如下: 表1:任务管理器 表2:用户/主机 我需要任务创建者的名称任务创建者ID和任务指派者的名称任务指派者ID来自任务主机和用户主机 我尝试了以下代码: 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_ASSIG
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'
但它不起作用。在加入条件中,您规定受让人和创建者必须与用户ID相同。在示例表中,两个任务不能具有相同的受让人或创建者。因此,您将不会得到任何回报为此,您需要两个连接:
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';
我还将连接切换为左连接。如果其中一行上没有匹配项,任务仍将显示。您需要执行两个联接,一个用于创建者,另一个用于受让人。两个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'
连接两个表只需1秒钟。像这样的事情:-
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';
这可能会对您有所帮助。您的查询试图找出是否有任务创建者为自己创建了任务,您需要再添加一个联接以完成此任务:
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'
但你为什么大喊大叫?
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';
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'