2016-06-02 9 views
0

を持っていない行のみ私はthisthisthisthisthisを見てきましたが、私の質問は異なっています。挿入一つのテーブルから別の行が、何の重複

私は表1を持っている:

id c a b rc bid 
1 12 4 6 35 4 
2 12 4 6 67 7 
3 12 4 6 88 8 
4 23 4 7 49 3 
5 23 5 8 59 8 

表2はまた、同じ列を持っていますが、bid列を持っていません。

列の値が同じである場合、行は重複と見なされます。c,aおよびb。したがって1,2,3行は重複していると見なされます。

Table1Table2の行を重複しない行だけ挿入したいとします。 これは、行1,2および3がTable2に挿入されないことを意味します。重複がないので、行4と5だけが挿入されます。

ので、表2に挿入した後、次のようになります。

select distinct c,a,b,count(*) from Table1 group by c,a,b having count(*) > 1 

しかし、どのように把握することはできませんよ。

id c a b rc 
1 23 4 7 49 
2 23 5 8 59 

を私は行がこのクエリを使用して何の重複を持たない得ることができているかを知ります挿入するには特定の列を指定する必要があるため、Table2に挿入してください。あなたが重複行を除外するためにNOT EXISTSを使用することができます

insert into Table2 (c, a, b, rc) select distinct c,a,b,count(*) from Table1 group by c,a,b having count(*) > 1 
+0

表2のデータも指定します(挿入後)。 – jarlh

+1

* Table2にも同じ列がありますが、入札列はありません。* - あなたのINSERTでは 'bid'列を使用しています! –

+1

あなたが言ったように、 'Table2'には' bid'カラムがありません。それで、なぜあなたは 'のように挿入しようとしているのですか?' Table2(c、a、b、rc、bid)... ' – 1000111

答えて

2

あなたはそれを行うには多くの方法があります

INSERT INTO Table2(c, a, b, rc, bid) 
SELECT c, a, b, rc, bid 
FROM Table1 t1 
WHERE (c,a,b) not in (SELECT c,a,b 
     FROM Table1 t2 
     GROUP BY c, a, b 
    HAVING COUNT(*) > 1 
) 
1

:重複がある場合に

INSERT INTO Table2(c, a, b, rc, bid) 
SELECT 
    c, a, b, rc, bid 
FROM Table1 t1 
WHERE NOT EXISTS(
    SELECT 1 
    FROM Table1 t2 
    WHERE 
     t2.c = t1.c 
     AND t2.a = t1.a 
     AND t2.b = t1.b 
    HAVING COUNT(*) > 1 
) 

HAVING COUNT(*) > 1がチェックされます

は明らかに動作しません。このような何かをしようとしました。

+0

@sagi、yup。キャッチをありがとう。 –

+0

エラー: 'where句'の 't2.c'列が不明です – Nav

1
insert into table2 (c,a,b,rc) 
select c,a,b,rc from table1 
where id in (select distinct id 
       from Table1 group by c,a,b having count(*) = 1) 
+0

ありがとうございますが、このエラーは 'SELECTリストの式#1はGROUP BY句にはなく、機能的ではない非集計列 'Table1.id'を含んでいますGROUP BY句の列に依存します。これはsql_mode = only_full_group_by' – Nav

0

副選択ではないでも使用することができます。あなたはすでに多くの正解を持っています。ここでは、あなたが近づいた方法に基づいてクエリを出しています。

INSERT INTO Table2 (c, a, b, rc) 
SELECT 
    c, 
    a, 
    b, 
    rc 
FROM 
    Table1 
GROUP BY c, a, b 
HAVING count(*) = 1; 
+0

と互換性がありません。私の間違い。挿入された行では、4番目の列がカウント値になってしまうため、これは適切な解決方法を提供しませんでした。 4番目の列は 'rc'列のものでなければなりません。 – Nav

+0

それはばかげていた。それを修正しました。実際に私はあなたの質問から修正を始めました。私はそれに気付かなかった。 @Nav – 1000111

+0

SELECTリストの式#4はGROUP BY句にはなく、GROUP BY句のカラムに機能的に依存しない非集約カラム 'rc'を含みます。これはsql_mode = only_full_group_byと互換性がありません。 scaisEdgeの答えがうまくいきました。ありがとう、すべて同じ。 – Nav

関連する問題