2009-07-05 9 views
0

内の行を削除する私はテーブルを持っている:は、MySQL

DELETE FROM NACHRICHTEN JOIN 
        NACHRICHTEN_EMPFAENGER_MAP USING (NACHRICHT_ID) 
        WHERE EMPFAENGER_ID = 31 && NACHRICHT_ID = 3 ; 

しかし、それは動作していない:

 
NACHRICHT_ID | VERFASSER_USERNAME | BETREFF | TEXT | DATUM | EMPAENGER_ID 
------------------------------------------------------------------------------ 
      |     |   |  | 2009-07-01| 
    1  |   h   | hfgh | hfgh | 23:15:10 | 31 
------------------------------------------------------------------------------ 
      |     |   |  | 2009-07-02| 
    3  |   h   | hfgh | hfgh | 00:30:10 | 31 
------------------------------------------------------------------------------ 
      |     |   |  | 2009-07-02| 
    4  |   q   | hfgh | hi | 11:42:06 | 31 
------------------------------------------------------------------------------ 
      |     |   |  | 2009-07-02| 
    5  |   h   | hfgh | hfgh | 12:53:56 | 31 
------------------------------------------------------------------------------ 
      |     |   |  | 2009-07-02| 
    6  |   h   | hfgh | hfgh | 13:19:53 | 31 
------------------------------------------------------------------------------ 
      |     |   |  | 2009-07-02| 
    7  |   h   | hfgh | hfgh | 13:20:18 | 31 
------------------------------------------------------------------------------ 
      |     |   |  | 2009-07-02| 
    8  |   mkd  | hfgh | hfgh | 13:47:32 | 31 
------------------------------------------------------------------------------ 
      |     |   |  | 2009-07-02| 
    9  |   h   | hfgh | hfgh | 16:42:10 | 31 
------------------------------------------------------------------------------ 

私はNACHRICHT_ID = 3行を削除しようとしています。私は間違って何をしていますか?

+2

@darkrain - 「削除後に参加する」と言ったときの意味を説明してください。それはまったく明らかではありません。 –

+0

おそらく、特定の受信者に送信されたすべてのニュースアイテムを削除しようとしていますか? – feihtthief

答えて

2
DELETE FROM 'table' WHERE NACHRICHT_ID = 3 
1
DELETE FROM NACHRICHTEN 
WHERE EMPFAENGER_ID = 31 && NACHRICHT_ID = 3; 
2

Aは、これがある(いくつかの他のテーブルからのデータに基づいて、一時テーブルを作成し、この一時テーブルから値を取得する操作であり、それを破棄参加実際の実装ではありません)。だから、「参加した後、」「から」削除または

はあまり意味がありませんアイデアです。しかし、私が正しく理解できない場合は、メッセージ(Nachricht)を削除したいだけです。他の回答に示されているように、このメッセージをメッセージテーブルから削除するだけです。その後

あなたがSELECT * FROM ... JOIN ...を行う場合、次のメッセージがいずれかの結合結果には存在しないことがわかります。

私は役立つことを願っています。

PS:あなたを助けるためにしようとしている人で大声で叫ぶする必要はありません。

2

MyISAMをストレージエンジンとして使用していると思いますが、残念ながら外部キーはサポートされていません。

あなたがB_ID = 13にリンクされているすべてのAsを削除したい場合は
A 
--- 
A_ID (PK), A_SOMETHING 

B 
--- 
B_ID (PK), B_SOMETHING 

C 
--- 
A_ID (PK, FK), B_ID (PK, FK) 

、次の操作を行うことができます。

ので、以下の表に与えられました。

DELETE FORM A WHERE A_ID IN (SELECT A_ID FROM C WHERE B_ID = 13); 

または、リンクBのB_SOMETHINGの値が 'foo' である場合など、すべてを削除する場合:

DELETE FORM A WHERE A_ID IN 
    (SELECT C.A_ID FROM B,C 
     WHERE B.B_ID = C.B_ID 
      AND B.B_SOMETHING = 'Foo' 
    ); 

あなたが行うには、いくつかのクリーンアップを持って、後:

DELETE FROM C WHERE A_ID NOT IN (SELECT A_ID FROM A); 

さて、すべて手動でこれを行うことは苦痛ですし、外部キー(InnoDB)をサポートするストレージエンジンを使用したほうが良いです。

あなたは、関連するすべてのテーブルのスクリーンショットだけでなく、参加した結果を提供する必要があります。それははるかに明確にあなたの質問をしたでしょう。

+0

+1は技術的に正確です。私は外来キーの提案も良いものだと思っていますが、この質問の範囲から少し外れるかもしれません。 – feihtthief

5

あなたの質問は不明です。あなたを行います(私は名前を推測しています)=受信者

受信者へ

  • NACHRICHTEN_EMPFAENGER_MAP =ニュースアイテムが
  • EMPFAENGER地図

    • NACHRICHTEN =ニュースアイテム:

      あなたは3つのテーブルを持っていますニュースアイテムを削除しますか?あなたが実際に削除したい場合は

      delete from NACHRICHTEN_EMPFAENGER_MAP where NACHRICHT_ID=3 and EMPFAENGER_ID=31; 
      

      :あなたは、ID 3でニュース項目の間のマッピングとid 31と受信者を削除したい場合は

      delete from NACHRICHTEN where NACHRICHT_ID = 3; 
      

      、その後、次の操作を行います。そして、これを行いますID 31と受信者は、あなたが他の何かをしたい場合は、より多くの詳細が喜ばとの質問をする。この(表がEMPFAENGERと呼ばれていると仮定した場合)

      delete from EMPFAENGER where EMPFAENGER_ID = 31; 
      

      を行います。