2013-01-08 132 views
0

嗨,我有这种情况下,我在这里。SQL:比较两个表

我有两个表格A和表格B,它们有一个共同的主键(panelist_id),每个panelist_id都有很多的entity_id。

我想检查是否为每个panelist_id和相同的entity_ids都存在于表中或没有。

注:有很多panelist_id的和每个panelist_ids有很多entity_ids ..

请帮助我。

+0

那么你有什么尝试? –

+0

这是什么RDBMS? –

+0

您使用的是什么RDBMS?你也可以给我们一个表A和表B的表定义。还有一个例子,你的数据和你期望的结果也会有帮助。 – twoleggedhorse

回答

0
Select A.panelist_id from tableA as A inner join tableB as B 
on A.panelist_id=B.panelist_id 
GROUP BY A.panelist_id 
HAVING COUNT(DISTINCT A.entity_id)=COUNT(DISTINCT B.entity_id) 
2

要选择panelist_id/ENTITY_ID元组,其仅在表中的一个可用的,你试试这样做:

select panelist_id, entity_id from 
(
    select panelist_id, entity_id from a 
    union all 
    select panelist_id, entity_id from b 
) 
group by panelist_id, entity_id 
having count(*) = 1; 
0

我不能工作了,你问什么,如果你只是想知道每个ENTITY_ID/Panelist_ID元组,如果它存在于一个或两个表,那么这将工作:

SELECT Panelist_ID, 
     Entity_ID, 
     CASE WHEN COUNT(A) > 0 AND COUNT(B) > 0 THEN 'Both Tables' 
      WHEN COUNT(B) = 0 THEN 'Table A' 
      WHEN COUNT(A) = 0 THEN 'Table B' 
     END AS Status 
FROM ( SELECT Panelist_ID, Entity_ID, 1 AS A, NULL AS B 
      FROM A 
      UNION ALL 
      SELECT Panelist_ID, Entity_ID, NULL AS A, 1 AS B 
      FROM B 
     ) T 
GROUP BY Panelist_ID, Entity_ID; 

如果你想知道哪里panelist_IDs每个表中的元组是在S AME,没有元组存在一个表不存在于另一方案则需要使用:

SELECT * 
FROM A 
     FULL JOIN B 
      ON A.Panelist_ID = B.Panelist_ID 
      AND A.Entity_ID = B.Entity_ID 
WHERE A.Entity_ID IS NOT NULL 
AND  B.Entity_ID IS NOT NULL; 

或者,如果你想知道的是存在于一个表中的元组,而不是其他你能用途:

SELECT * 
FROM A 
     FULL JOIN B 
      ON A.Panelist_ID = B.Panelist_ID 
      AND A.Entity_ID = B.Entity_ID 
WHERE A.Entity_ID IS NULL 
OR  B.Entity_ID IS NULL; 

编辑

基于对于只需要来验证一个临时表是一样的永久表,你可以使用EXISTS评论:

SELECT * 
FROM PermanentTable p 
WHERE NOT EXISTS 
     ( SELECT 1 
      FROM TempTable t 
      WHERE p.Panelist_ID = t.Panelist_ID 
      AND  p.Entity_ID = t.Entity_ID 
      ... More conditions to help find if entries are missing from temp table 
     ) 
+0

详细情况如下。我有一个临时表,我使用很多连接条件创建了一个临时表,并且我有另一个永久表,它是某个进程的输出表。现在我需要检查填充在临时表和输出表中的数据是否匹配。所以我有主键作为小组成员id,每个panelist_id都有几千个entity_id。我检查了两个表中的panelist_ids是相同的。现在我需要检查是否为每个panelist_id,相同的entity_ids正在填充或不填充。 –

+0

非常感谢。 –