在两个union子查询之间传递引用

时间:2016-04-15 14:05:38

标签: sql sql-server

在MS sql server中,我有这样的查询

select start_date, end_date, role, userId from T1
union 
select start_date, end_date,role, userId from T2
where 
T2.userId = T1.userId

目前我在最后一行收到错误的语法错误

2 个答案:

答案 0 :(得分:1)

这种方法对你不起作用。 UNION and UNION ALL组合了一个或多个结果集。

示例:

Table 1
UserId
1
2

Table 2
UserId
2
3

使用UNION将对结果进行重复数据删除和组合:

Result
UserId
1
2
3

UNION ALL将返回:

Result
UserId
1
2
2
3

由于T1.UserId和T2.UserId的内容现在位于同一列,因此您无法搜索匹配项。相反,您可能需要JOIN

SELECT
    T1.UserId
    T2.UserId
FROM
    T1 
        INNER JOIN T2 ON T2.UserId = T1.UserId
;

这将返回:

UserId   UserId
2        2

答案 1 :(得分:0)

如果我理解你正在尝试什么,一种方法就是这样:

SELECT {Columns}
FROM Table1
WHERE EXISTS(SELECT * FROM Table2 WHERE Table2.Id=Table1.Id)
UNION 
SELECT {Columns}
FROM Table2
WHERE EXISTS(SELECT * FROM Table1 WHERE Table1.Id=Table2.Id)

这样的结果将是两个查询中的UNION,其中只返回两个表中存在的ID。