2017-03-27 2 views
0

私はほとんど同じタイトルの投稿を読んだが、私の質問には答えなかった。 私はテーブルtable1とtable2を2つ持っています。どちらも、COL1フィールドを持っている2つのテーブルから、またそれ自体でフィールドの重複値を見つけるにはどうすればよいですか?

SELECT 
     * 
    FROM 
     table1 
    GROUP BY 
     col1 
    HAVING 
     COUNT(col1) > 1 

このコードは、私たちにcol1の値は表1に複製されたデータを与えるだろうが、私は値がTABLE1 OR table2の中にいずれかの複製されCOL1の値を取得する必要があり、そうなる2件のデータがありますtable1の同じcol1値、またはtable2の同じcol1値 ORは2つのテーブルから複製されているため、col1 = Aの場合はtable1に、col1 = Aの場合はtable2のデータがあります。

+0

まず、2つのテーブルの関連フィールドを一時テーブルに結合し、その一時テーブルに対して同じクエリを実行します。 – CoolBots

+0

私はphpmyadminを使用していますが、私はそれのための一時テーブルを作ることができますか? –

+0

どのdbmsを使用していますか? – jarlh

答えて

0

table1table2からの値の和集合を取得し、グループとその結果をフィルタリングします。ユニオンが実行されたときに重複を失わないように、UNION ALLを使用してください。

SELECT * FROM (
    SELECT col1 FROM table1 
    UNION ALL 
    SELECT col1 from table2 -- you can change the column name as required 
) AS blah 
GROUP BY 1 HAVING count(*) > 1; 

GROUP BYのフィールド番号による列への参照に注意してください。これにより、ASを使用して列名の別名を付けなくても、異なる表の異なる列名を使用できます。

0

グループ2のテーブルデータが必要なのであれば分かりますか?たとえば、表1にcol1 = 'a'があり、表2にcol1 = 'a'がある場合は、そのデータを表示しますか? そうならば、この

select sel.col1 from (SELECT 
     col1 
    FROM 
     table1 
    GROUP BY 
     col1 
    union all 
    SELECT 
     col1 
    FROM 
     table2) sel 
    GROUP BY 
     sel.col1 
    HAVING 
     COUNT(sel.col1) > 1 
0

を試してみてくださいあなたは、以下の使用可能性があります

  1. UNION ALL - 彼らは同じ情報スキーマ
  2. がテーブルに参加している場合、その後句
0

をHAVING使用しました私が正しく理解していれば、table1で2回、table2で2回、table1で1回、table2で1回だけ値が見つかるかどうかは気にしません。これらの重複をすべて考慮します。したがって、すべてのtable1レコードとすべてのtable2レコードで構築されたセット全体を調べる必要があります。あなたはUNION ALLでこれらを取得する:

SELECT col1 
FROM (SELECT col1 FROM table1 UNION ALL SELECT col1 FROM table2) t 
GROUP BY col1 
HAVING COUNT(*) > 1 
関連する問題