4

ID に基づいて、1 つのクエリで 2 つの異なるテーブルの情報を削除しようとしています。

このタスクを達成するためにここでいくつかのソリューションを試しましたが、まだやろうとしていることを達成していません.

表 1 - 内容

---------- ---------
 ContentID | Content
--------------------

表 2 - 投票

---------------------------
 VoteID | ContentID | Vote 
---------------------------

IDと一部またはすべての投票に基づいてコンテンツ行を削除したいと考えています(投票レコードが 0 である可能性があります)。トランザクション、カスケード削除、または 2 つの異なるクエリを使用したくありません。

ここで何が最適か - LEFT JOIN? 内部結合?

ここで何か助けていただければ幸いです。

4

5 に答える 5

9
DELETE Content, Votes
FROM Content
LEFT JOIN Votes
ON Votes.ContentID = Content.ContentID
WHERE Content.ContentID = ?
于 2010-07-08T16:26:03.880 に答える
3

関係がある場合は、このON DELETE CASCADEオプションを試すことができます。

もう 1 つのオプションは、ストアド プロシージャを作成し、2 つの手順で削除を実行することですが、サーバー呼び出しは 1 回だけです。

于 2010-07-08T15:33:11.307 に答える
1

DELETE ステートメントで複数のテーブルを指定して、WHERE 句の特定の条件に応じて、1 つ以上のテーブルから行を削除できます。ただし、複数テーブルの DELETE で ORDER BY または LIMIT を使用することはできません。table_references 句は、結合に含まれるテーブルをリストします。その構文は、セクション12.2.7.1「JOIN 構文」で説明されています。

最初の複数テーブル DELETE 構文は、MySQL 4.0.0 以降でサポートされています。2 つ目は、MySQL 4.0.2 以降でサポートされています。

最初の複数テーブルの構文では、FROM 句の前にリストされたテーブルから一致する行のみが削除されます。2 番目の複数テーブル構文では、FROM 句 (USING 句の前) にリストされているテーブルから一致する行のみが削除されます。その効果は、同時に多くのテーブルから行を削除し、検索のみに使用される追加のテーブルを持つことができるということです:

DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;

または:

DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;

これらのステートメントは、削除する行を検索するときに 3 つのテーブルすべてを使用しますが、テーブル t1 と t2 からのみ一致する行を削除します。

このリンクは役に立ちます " http://dev.mysql.com/doc/refman/4.1/en/delete.html "

于 2010-07-08T15:45:44.797 に答える
1
DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;

こちらは3テーブル用ですが、用途に合わせてご利用いただけると思います。

于 2010-07-08T15:32:17.373 に答える