在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
目前我在最后一行收到错误的语法错误
答案 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。