删除MySQL中的一行

时间:2009-07-05 20:04:11

标签: sql mysql

我有一张桌子:

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

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

但它不起作用。我做错了什么?

6 个答案:

答案 0 :(得分:5)

你的问题不清楚。

你有3张桌子:

  • NACHRICHTEN =新闻项目
  • NACHRICHTEN_EMPFAENGER_MAP =收件人地图的新闻项目
  • EMPFAENGER(我猜这个名字)=收件人

您要删除新闻项吗?然后这样做:

delete from NACHRICHTEN where NACHRICHT_ID = 3;

如果要删除ID为3的新闻项和ID为31的收件人之间的映射,请执行以下操作:

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

如果要删除ID为31的实际收件人,请执行此操作(假设该表名为EMPFAENGER)

delete from EMPFAENGER where EMPFAENGER_ID = 31;

如果您想做其他事情,请提出更详细的问题。

答案 1 :(得分:2)

DELETE FROM 'table' WHERE NACHRICHT_ID = 3

答案 2 :(得分:2)

join是一种操作,它根据来自其他几个表的数据创建一个临时表,并从该临时表中检索值,然后丢弃它(这是概念,而不是实际的实现)。

因此,删除“来自”或“加入后”是一个没有多大意义的想法。但如果我正确地解读,你只想删除该消息(Nachricht)。您应该从消息表中删除此消息,如其他答案中所示。

之后,如果您执行SELECT * FROM ... JOIN ...,则会看到联接结果中的消息不存在。

我希望有所帮助。

PS:对于那些试图帮助你的人来说,没有必要大喊大叫。

答案 3 :(得分:2)

我猜您使用 MyISAM 作为您的存储引擎,遗憾的是它不支持外键。

所以,如下表所示:

A
---
A_ID (PK), A_SOMETHING

B
---
B_ID (PK), B_SOMETHING

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

如果要删除所有链接到B_ID = 13的As,您可以执行以下操作。

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

或者,如果你想删除链接B的B_SOMETHING值为'Foo'的所有As:

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 )。

您应该提供所有相关表格的屏幕截图,而不仅仅是连接结果。这会使你的问题更加清晰。

答案 4 :(得分:1)

答案 5 :(得分:1)

DELETE FROM NACHRICHTEN 
WHERE EMPFAENGER_ID = 31 && NACHRICHT_ID = 3;