我有两张桌子'顾客'。
第一个:
ID | UserID | Date
1. | 1 | 2018-05-01
2. | 1 | 2018-05-02
第二个:
ID | UserID | Date
1. | 1 | 2018-05-01
2. | 1 | 2018-05-02
3. | 1 | 2018-05-03
因此,正如您在第二个表中看到的那样,还有一行。 到目前为止,我已经写了这段代码:
;with cte_table1 as (
select UserID, count(id) cnt from db1.Customer group by UserID
),
cte_table2 as (
select UserID, count(id) cnt from db2.Customer group by UserID
)
select * from cte_table1 t1
join cte_table2 t2 on t2.UserID = t1.UserID
where t1.cnt <> t2.cnt
这给了我预期的结果:
UserID | cnt | UserID | cnt
1 | 2 | 1 | 3
到目前为止,一切都很好。问题是,这两个表有很多行,我希望结果有日期,其中cnt不匹配。
换句话说,我想有这样的事情:
UserID | cnt | Date | UserID | cnt | Date
1 | 2 | 2018-05-01 | 1 | 3 | 2018-05-01
1 | 2 | 2018-05-02 | 1 | 3 | 2018-05-01
1 | 2 | NULL | 1 | 3 | 2018-05-03
最好的结果是结果集,其中两个cte都加入了这个:
UserID | cnt | Date | UserID | cnt | Date
1 | 2 | 2018-05-01 | 1 | 3 | 2018-05-01
1 | 2 | 2018-05-02 | 1 | 3 | 2018-05-01
1 | 2 | NULL | 1 | 3 | 2018-05-03
1 | 2 | 2018-05-30 | 1 | 3 | NULL
答案 0 :(得分:1)
您应该执行 FULL OUTER JOIN 查询,如下所示
Select
C1.UserID,
C1.cnt,
C1.Date,
C2.UserID,
C2.cnt,
C2.Date
from
db1.Customer C1
FULL OUTER JOIN
db2.Customer C2
on C1.UserId=C2.UserId and C1.date=C2.Date