0

こんにちは、私はこのシナリオを持っていて、ここで打たれました。

テーブル A とテーブル B の 2 つのテーブルがあり、共通の主キー (panelist_id) が 1 つあり、各 panelist_id には多くの entity_id があります。

各 panelist_id と同じ entity_ids が両方のテーブルに存在するかどうかを確認したい。

注: 多くの panelist_id があり、各 panelist_id には多くの entity_id があります。

私を助けてください。

4

3 に答える 3

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;
于 2013-01-08T09:36:22.183 に答える
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;

各テーブルのタプルが同じで、一方のテーブルに存在せず、もう一方のテーブルに存在しないタプルがないパネリストIDを知りたい場合は、次を使用する必要があります。

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
        )
于 2013-01-08T09:46:10.443 に答える
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)
于 2013-01-08T09:34:17.073 に答える