根据与其他两个表的关系删除记录

时间:2017-08-23 04:30:48

标签: mysql sql join

我在MySQL中有三个表,table1table2table3。 table2具有table1的外键,而table3具有table2的外键但不具有table1的外键。结构是这样的:

表1

Name   | type
------------------------
d_id   | int
d_name | varchar(100)

表2

Name   | type
---------------------------------------
s_id   | int
d_id   | int (foreign_key table1 d_id)
s_name | varchar(100)

表3

Name    | type
----------------------------------------
m_id    | int
s_id    | int (foreign_key table2 s_id)
m_value | int

我可以轻松选择并加入这三个表格的信息,但删除类似联接的基础我只是不知道该怎么做。这就是我选择数据的方法。

SELECT * FROM table3 
JOIN table2 ON table3.s_id = table2.s_id 
JOIN table1 ON table2.d_id = table1.d_id

现在,我想删除table3上的一些值,其中table3 = table2 = table1我该怎么做?

4 个答案:

答案 0 :(得分:1)

考虑到您要删除Table3中未被任何外键引用的数据,我使用虚拟数据来演示此查询。请注意,在从外键引用的Table1Table2中删除数据时,您应该只会遇到问题。您无法从主表中删除数据,而不会将子引用中的数据删除为{{ 1}}强制Primary and Foreign key约束。

Referential Integrity

答案 1 :(得分:0)

如果您乐意编写一个select语句来选择应删除的ID列表,则可以删除这些行:

DELETE FROM sometable WHERE ID IN 
(
  SELECT idcolumn FROM othertables JOIN otherothertables WHERE blahblah ...
)

答案 2 :(得分:0)

DELETE FROM table3 t3
INNER JOIN table2 t2 ON t3.s_id = t2.s_id
INNER JOIN table1 t1 ON t2.d_id = t1.d_id
WHERE t3.s_id=t2.s_id AND t2.d_id=t1.d_id

答案 3 :(得分:0)

假设您要删除table3中与d_name=fdiengdoh table1对应的所有数据,您可以使用以下查询。

DELETE FROM table3 as t3
inner join table2 as t2 on t3.s_id = t2.s_id
inner join table1 as t1 on t2.d_id = t1.d_id
AND t1.d_name = 'fdiengdoh'

如果您需要删除所有相应的数据,只需从上面的查询中删除最后一行。

希望这会有所帮助。