0

次のステートメントを実行しようとしています。

DELETE a
FROM db.table1 a
    INNER JOIN (SELECT domainname
                FROM db.table1
                WHERE domainname LIKE '%.uci.edu'
                GROUP BY keyvalue
                HAVING COUNT(1) > 1
        ) b ON a.id = b.id 

タイトルに記載されているエラーが発生しました。私が達成しようとしていることは、ここで説明されています: How to make the result of one query be in the NOT IN clause?

この仕事を手伝ってください。なぜb.idが不明なのですか?? 私はそのようなタイプの結合の経験がありません。2 つの異なるテーブルを結合することは理解していますが、このステートメントについて誰か説明してもらえますか? domainnameは一意の値であることに注意してください。主キーはidauto_increment ですが、列を区別するために使用しません。私は主にユニークな別の値domainname_noを使用します。

編集:上記のコマンドは機能しません。

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

例: 私のテーブル: cert_id | ドメイン名 | ドメイン_証明書 | キー 1 | yahoo.com | a.yahoo.com_1 |5555 2 | yahoo.com | a.yahoo.com_2 |6666 3 | b.yahoo.com | b.yahoo.com_1 |5555 4 | b.yahoo.com | c.yahoo.com_2 |6666

各ドメインには、キーに関連付けられた複数の証明書がある場合があります。ドメイン名が異なる証明書に同じキーが含まれている場合、それを削除したいと考えています。

現在、同じキーを持つ 2 つのドメイン名がa.yahoo.comあります。「%.yahoo.com」のような同じパターンを持ち、一意の値と等しくないドメイン名b.yahoo.comを削除する必要があります。b.yahoo.coma.yahoo.com

現在、私がやっていることは、個別の値を照会することです:

select distinct domainname 
from db.table1
where domainname like '%.uci.edu'
group by keyvalue
order by domainname

次に、個別のリストになく、同じパターンを持つ値を削除します%.yahoo.com

delete from db.table1 where domain not in ( I type the list of distinct domain 
names manually)
and domainanme like '%.yahoo.com';

問題が明確になったことを願っています。

しかし、このコマンドは機能しません。詳細については、「1 つのクエリの結果を NOT IN 句に含める方法」を参照してください。

4

2 に答える 2

0

IDに対してを指定していませんSubQuery。代わりにこれを試してください:

DELETE a
FROM db.table1 a
    INNER JOIN (SELECT id, domainname             -- added ID field
                FROM db.table1
                WHERE domainname LIKE '%.uci.edu'
                GROUP BY keyvalue
                HAVING COUNT(1) > 1
        ) b ON a.id = b.id                        -- ID was used here
于 2012-08-06T15:48:01.550 に答える
0

2 つのテーブルを結合しておらず、table1 をクエリの結果と結合しており、そのクエリに id 列を含めていません。SELECT id, domainnameサブクエリの先頭で試してください。

于 2012-08-06T15:48:30.117 に答える