左连接或右连接取决于数据

left join or right join depending on data

我处于需要加入 2 table 的情况,但根据数据,我有时需要将 table 视为主要的,另一个视为加入的,反之亦然。 我举一个简单的例子来重现这种情况,假设我有 2 tables(此处为临时 tables),其中包含员工的任务:

#JOB_TASKS 包含处理员工工作的任务

#FAMILY_TASKS包含处理员工家庭的任务

如果ID_EMPLOYEE = 1#FAMILY_TASKS没有记录,而#JOB_TASKS有记录,#JOB_TASKS应该是主要的table和#FAMILY_TASKS 加入的。而如果对于ID_EMPLOYEE = 2#FAMILY_TASKS有一些记录,而#JOB_TASKS没有记录,#JOB_TASKS应该是加入table和#FAMILY_TASKS的主体上。

不知何故这些是我的查询:

Select * 
FROM 
#FAMILY_TASKS FT LEFT OUTER JOIN
#JOB_TASKS JT ON JT.ID_EMPLOYEE = FT.ID_EMPLOYEE

--same query "right join" written as "left join":
Select * 
FROM 
#JOB_TASKS JT LEFT OUTER JOIN
#FAMILY_TASKS FT ON FT.ID_EMPLOYEE = JT.ID_EMPLOYEE

我想要一个自动执行正确连接的查询。这可以用游标来完成,但是如何用 select 语句来执行呢?

我希望我表达了自己的意思。

您可以使用 FULL OUTER JOIN 和一些条件来做到这一点。

在伪代码中,您的条件将执行以下操作:

(ID_EMPLOYEE = 1 AND #JOBTASKS.Column IS NOT NULL)
OR 
(ID_EMPLOYEE = 2 AND #FAMILYTASKS.Column IS NOT NULL)

Op 还没有更新他们的 post,所以这是一个猜测。我 认为 这可以通过 FULL OUTER JOIN 实现,使用以下逻辑:

DECLARE @EmployeeID int = 1;

SELECT * 
FROM #FAMILY_TASKS FT
     FULL OUTER JOIN #JOB_TASKS JT ON JT.ID_EMPLOYEE = JT.ID_EMPLOYEE
WHERE @EmployeeID IN (FT.ID_EMPLOYEE,JT.EmployeeID);