Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 比较两个表,并获取计数相同的行_Sql_Sql Server - Fatal编程技术网

Sql 比较两个表,并获取计数相同的行

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,其中给定类的数量在两个表中都匹配

表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)));