左连接或右连接取决于数据
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);
我处于需要加入 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);