3

subscriber_idaと aがある表では、letter_idサブスクライバーは複数のレターにサブスクライブしている可能性があります。他のレターを購読している場合、特定のレターの購読を解除したいと考えています。クエリの作成に助けが必要です。以前にネストされたクエリと呼ぶものを見たことがありますが、それらを書く経験はありません。

最初に次のようにクエリを実行することで、おそらく PHP でこれを行うことができます。 SELECT subscriber_id FROM subscriptions WHERE letter_id=3 次に、結果に対して foreach を実行し、subscriber_id に複数の一致がある場所を削除します。

ここに疑似コードを書いてみましたが、それでもハングアップします。

役立つ場合は、各行にも独自の ID があります。

4

4 に答える 4

1

DELETE FROM subscriptions WHERE letter_id=3 AND subscriber_id IN (SELECT * FROM (SELECT subscriber_id FROM subscriptions WHERE letter_id<>3) AS x)

于 2013-10-03T19:27:20.427 に答える
0

誰が複数の「その他」の文字 (この場合letter_idは 3 つ) を持っているかを調べるクエリは、次のようになります。

SELECT subscriber_id
FROM subscriptions
WHERE letter_id <> 3
GROUP BY subscriber_id
HAVING COUNT(*) > 1

これを削除クエリに結合し、条件を追加するletter_id = 3と、すべて設定されます。

DELETE FROM subscriptions
INNER JOIN (
  SELECT subscriber_id
  FROM subscriptions
  WHERE letter_id <> 3
  GROUP BY subscriber_id
  HAVING COUNT(*) > 1
) MoreThan1 ON subscriptions.subscriber_id = MoreThan1.subscriber_id
WHERE letter_id = 3
于 2013-10-03T19:24:53.723 に答える
0

テーブルに主キーがあると仮定します(つまりid、自動インクリメント付き):

DELETE n1 FROM `table` n1, `table` n2 WHERE n1.id > n2.id AND n1.`field` = n2.`field`

tableテーブル名はどこにありfield、テストするフィールドです。

この回答からクエリを適応させました。テーブルにプライマリ ID テーブルがない場合は、既存のテーブルに追加できます。

于 2013-10-03T19:25:21.637 に答える
0

このような質問をしていただければ幸いです。

DELETE FROM subscriptions 
WHERE subscriber_id = (SELECT subscriber_id FROM subscriptions WHERE letter_id=3);
于 2013-10-03T19:28:22.537 に答える