1

基本的に、私は3つのテーブルを持っています

フィールド ID (関連付けられたデータを削除したいもの) と、参加者リストを識別するparticipantlist_id を持つ職場。

参加者リスト - list_id と名前のみ

participantlist_links - list_id およびparticipant_idを使用

私が使用しようとしているクエリは次のとおりです。

DELETE FROM workplaces,
participantlist,
participantlist_links 
WHERE workplaces.id =  '8' AND 
      workplaces.participantlist_id = participantlist_links.list_id AND  
      workplaces.participantlist_id = participantlist.list_id

しかし、私は得る:

MySQL は次のように述べています。

1064 - SQL 構文にエラーがあります。使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを参照してください

何か案は?

解決:

    DELETE t1, t2, t3
    FROM workplaces AS t1
    LEFT JOIN participantlist AS t2 ON t1.participantlist_id = t2.list_id
    LEFT JOIN participantlist_links AS t3 ON t2.list_id = t3.list_id
    WHERE t1.id = '8'
4

4 に答える 4

2

ON DELETE CASCADE外部キーを付けることを検討しましたか?このように、ワークスペースから行を削除すると、他の行も自動的に削除されます。

詳細については、次のリンクを参照してください: http ://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

それ以外の場合は、個別のDELETEFROMクエリを使用してすべてを削除する必要があります。

これらの削除の実行中にトランザクションを使用するのは賢明です。したがって、問題が発生した場合は、変更をロールバックできます。

BEGIN TRANSACTION;
DELETE FROM ......;
DELETE FROM ......;
COMMIT;
于 2012-05-19T08:07:59.893 に答える
1

試す

DELETE workplaces, participantlist, participantlist_links FROM workplaces,
participantlist,
participantlist_links 
WHERE workplaces.id =  '8' AND 
      workplaces.participantlist_id = participantlist_links.list_id AND  
      workplaces.participantlist_id = participantlist.list_id
于 2012-05-19T08:09:48.280 に答える
1

マニュアルに記載されているように、複数テーブル形式のDELETE構文は、使用している構文とは異なります。あなたがしたい:

DELETE workplaces, participantlist, participant_links
FROM   workplaces
  JOIN participantlist
    ON workplaces.participantlist_id = participantlist.list_id
  JOIN participantlist_links
    ON workplaces.participantlist_id = participantlist_links.list_id
WHERE  workplaces.id = '8'
于 2012-05-19T08:11:28.157 に答える
1

次のように、JOIN を使用して複数のテーブルから削除できます。

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

http://dev.mysql.com/doc/refman/5.5/en/delete.html

于 2012-05-19T08:15:43.630 に答える