我在MySQL中有三个表,table1
,table2
和table3
。 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我该怎么做?
答案 0 :(得分:1)
考虑到您要删除Table3
中未被任何外键引用的数据,我使用虚拟数据来演示此查询。请注意,在从外键引用的Table1
和Table2
中删除数据时,您应该只会遇到问题。您无法从主表中删除数据,而不会将子引用中的数据删除为{{ 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'
如果您需要删除所有相应的数据,只需从上面的查询中删除最后一行。
希望这会有所帮助。