假设我有以下2个表,
table1
-----------
col1 | col2
-----------
a1 b1
a2 b2
a3 b2
a4 b4
a1 b1
table2
-----------
col1 | col2
-----------
a1 b1
a2 b3
a2 b2
a4 b4
在上面的例子中,table2(a1,b1)中有一条记录在table1中出现不止一次(本例中为2),table2中有两条记录((a2,b2)和(a4,b4))在table1中只出现一次。我希望table2中的记录数在表1中具有完全匹配,并且table2中的记录数在table1中具有多于1个匹配。如何在单个查询中获得此结果。如下所示: -
2 1
我可以使用单独的查询来完成它,但我想在单个查询中实现这一点。
答案 0 :(得分:4)
我认为您在概念上想要的是table2
中的记录与table1
中的另一记录匹配的次数。由于您不需要报告匹配不的次数,我们可以从两个表之间考虑INNER JOIN
开始。然后,我们可以按col1
和col2
汇总并计算匹配数。最后,将其作为子查询传递,并计算每种匹配类型发生的次数。
SELECT
SUM(CASE WHEN t.cnt = 1 THEN 1 ELSE 0 END) AS countOfSingleMatch,
SUM(CASE WHEN t.cnt > 1 THEN 1 ELSE 0 END) AS countOfMultipleMatch
FROM
(
SELECT t2.col1, t2.col2, COUNT(*) cnt
FROM table2 t2
INNER JOIN table1 t1
ON t1.col1 = t2.col1 AND t1.col2 = t2.col2
GROUP BY t2.col1, t2.col2
) t
<强>输出:强>
在这里演示: