72558


PostgreSQLです。  
同じ構造のテーブルtable1~table5があり、idがそれぞれにあります。  
1つでもダブっているものをSQLであぶりだしたいのですが、

[code]

    select id
    from table1
    intersect
    select id
    from table2
    intersect
    ...
    
[/code]

のように書くと、おそらくすべてのテーブルに存在しているidのみが抽出されるという認識です。  
table2とtable5のみに存在している、table2,3,5に存在しているのようなidも抽出したいのですが、  
どのようなクエリを書けばよろしいでしょうか。  
出来たら番号1〜5の入っている列bangoも反映させたいです。  
詳しい方、よろしくお願いいたします。


CC BY-SA 4.0
2020-12-10T02:13:33.043
72553
2020-12-10T12:55:32.147
2020-12-10T12:55:32.147
12457
12457
question
sql postgresql
postgresqlのテーブル間にある共通idの出力


他のテーブルに同じIDが存在するものを抽出するSQLの例です。  
【SQL】

[code]

    SELECT id FROM (
        SELECT id, 'table1' AS tablename FROM  table1
        UNION ALL
        SELECT id, 'table2' AS tablename FROM  table2
        UNION ALL
        SELECT id, 'table3' AS tablename FROM  table3
        UNION ALL
        SELECT id, 'table4' AS tablename FROM  table4
        UNION ALL
        SELECT id, 'table5' AS tablename FROM  table5
    ) AS XX GROUP BY id HAVING COUNT(id) > 1;
    
[/code]

table2とtable5で1が重複しており、  
table2とtable3とtable5で2が重複しているケースで実行してみました。

【動作確認のSQL】

[code]

    WITH
    table1 AS (
        SELECT 10 id
    ),
    table2 AS (
        SELECT 1 id UNION ALL
        SELECT 2 id UNION ALL
        SELECT 20 id
    ),
    table3 AS (
        SELECT 2 id UNION ALL
        SELECT 30 id
    ),
    table4 AS (
        SELECT 40 id
    ),
    table5 AS (
        SELECT 1 id UNION ALL
        SELECT 2 id UNION ALL
        SELECT 50 id
    )
    SELECT id FROM (
        SELECT id, 'table1' AS tablename FROM  table1
        UNION ALL
        SELECT id, 'table2' AS tablename FROM  table2
        UNION ALL
        SELECT id, 'table3' AS tablename FROM  table3
        UNION ALL
        SELECT id, 'table4' AS tablename FROM  table4
        UNION ALL
        SELECT id, 'table5' AS tablename FROM  table5
    ) AS XX GROUP BY id HAVING COUNT(*) > 1;
    
[/code]

【動作確認結果】

[code]

     id
    ----
      1
      2
    (2 rows)
    
[/code]


CC BY-SA 4.0
2020-12-10T05:13:11.370
72558
2020-12-10T05:21:08.917
2020-12-10T05:21:08.917
35558
35558
72553
answer