0

特定の値のセットからではない値を削除したい。これらの値は事前にはわかりません。これらの値をクエリすることで知ることができ、プロセスを1つのステップで実行したいと思います。私は次のステートメントを実行しました:

delete from db.table1 where domain not in 
(
select distinct domainname 
from db.table1
where domainname like '%.uci.edu'
group by keyvalue
order by domainname
) 
and domainanme like '%.uci.edu';

domainnameが一意のフィールドであり、の主キーtable1が数値であることを知っていauto_incrementます。

私がする必要があるのは次のとおりです:私はドメイン名のリストを持っています。言う:aa.yahoo.com、bb.yahoo.com、cc.yahoo.com、aa.msn.com。各ドメイン名にはキー値があります。キーが共有されている場合は、このレコードを削除したいと思います。そこで、キー値でグループ化された個別の値を選択しました。レコードが個別のセットになく、同じトップレベルドメインを持っている場合、私はそれを必要としません。

クエリが間違っている可能性があります。SQLは私にerror: 1093: you can' specify target table table1 for update in FROM clause.

効率的な方法でこの目的を達成するのを手伝ってください。せん断されたトップレベルドメイン名の非常に長いリストがあります。必要なのは、明確なキー値を持つドメイン名だけです。すべてのドメイン名を1つずつ(私の例のように)実行する必要なしにこれを行うユニバーサルソリューションがある場合は、それが優れています。

編集: domainname一意のフィールドではありません。私は別のフィールドを使用します:domainnameNo一意のフィールドとして

4

1 に答える 1

0

これがあなたが探しているものだと思います:

DELETE a
FROM db.table1 a
    INNER JOIN (SELECT id
                FROM db.table1
                WHERE domainname LIKE '%.uci.edu'
                GROUP BY keyvalue
                HAVING COUNT(1) > 1
        ) b
        ON a.id = b.id;
于 2012-08-06T13:22:06.413 に答える