Sql 比较两个表,并获取计数相同的行
表1 ID类 1A 2A 3 B 4 C 表2 ID class 1 A 2 A 3 B 4 C ID类 1A 3 B 4 C 您好,有没有比较每个表的计数(类)的简单方法,如果两个表的该类计数相同,请返回ID和类 希望获得以下结果: ID class 1 A 3 B 4 C ID类 3 B 4 C 一种方法是: ID class 3 B 4 C 正如我最初误解的那样编辑!我已经任意地从表1返回了ID,其中给定类的数量在两个表中都匹配Sql 比较两个表,并获取计数相同的行,sql,sql-server,Sql,Sql Server,表1 ID类 1A 2A 3 B 4 C 表2 ID class 1 A 2 A 3 B 4 C ID类 1A 3 B 4 C 您好,有没有比较每个表的计数(类)的简单方法,如果两个表的该类计数相同,请返回ID和类 希望获得以下结果: ID class 1 A 3 B 4 C ID类 3 B 4 C 一种方法是: ID class 3 B 4 C 正如我最初误解的那样编辑!我已经任意地从表1返回了ID,其中给定类的数量在两个表中都匹配
SELECT t1.ID, t1.Class
FROM Table1 t1
JOIN
(
SELECT Class, COUNT(*) AS NumberOf
FROM Table1
GROUP BY Class
) x1 ON t1.Class = x1.Class
JOIN
(
SELECT Class, COUNT(*) AS NumberOf
FROM Table2
GROUP BY Class
) x2 ON x1.Class=x2.Class AND x1.NumberOf = x2.NumberOf
您将无法获得ID,因为如果B或C类有更多ID,数据库引擎将不知道选择哪个ID。一旦你知道你到底需要什么,你就必须编写一个更复杂的查询。试试这个:
SELECT
tbl1.class
FROM
(SELECT class, count(1) as cnt FROM table1 GROUP BY class) tbl1,
JOIN (SELECT class, count(1) as cnt FROM table2 GROUP BY class) tbl2 ON tbl1.class=tbl2.class
WHERE
tbl1.cnt=tbl2.cnt
这将返回表1中的ID和类,并适用于提供的测试数据。不保证适用于所有可能的数据组合。使用风险自负。不用于医疗设备、空中交通管制系统或其他涉及严重伤害、死亡或责任风险的应用。您的里程可能会有所不同。16岁以下儿童的使用应由负责任的成年人监督。请勿在强磁场、大风或青蛙或其他小型两栖动物降雨的情况下使用。不鼓励在大型两栖动物或食肉爬行动物存在时使用。没有在动物身上测试-你将是第一个
分享和享受。您可以使用新的子句INTERSECT获得它 有关此新条款的更多详细信息,请查看此帖子:
SELECT CLASS, ID
FROM TABLE1
WHERE CLASS IN
(SELECT CLASS FROM
(SELECT * FROM
(SELECT CLASS, COUNT(*) AS class_count
FROM table1
GROUP BY CLASS) T1
INNER JOIN
(SELECT CLASS, COUNT(*) AS class_count
FROM table2
GROUP BY CLASS) T2
USING (CLASS, CLASS_COUNT)));