我有一张桌子:
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 ;
但它不起作用。我做错了什么?
答案 0 :(得分:5)
你的问题不清楚。
你有3张桌子:
您要删除新闻项吗?然后这样做:
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;