2013-01-08 170 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

非常感謝。 –