Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 对具有条件的两个表执行内部联接操作会产生不同的结果_Sql_Sql Server - Fatal编程技术网

Sql 对具有条件的两个表执行内部联接操作会产生不同的结果

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

我有两个表,结构如下:

表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_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'