次のステートメントを実行しようとしています。
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
は一意の値であることに注意してください。主キーはid
auto_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.com
a.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 句に含める方法」を参照してください。