拜托,您能帮助我,如何在一个查询中删除多个表中的数据? 我有这个表结构:
products
texts
files
products_files - 这里是映射到产品的文件 - product_id,file_id texts_files - 这里是映射文件到文本 - text_id,file_id
我需要这样做: 如果我删除id为50的文件,我需要删除products_files和texts_files中的所有行,其中file_id = 50。
你知道吗,该怎么办?
我尝试使用左连接,但没有任何结果......
$query = 'DELETE products_files, texts_files FROM products_files
LEFT JOIN texts_files ON texts_files.file_id = products_files.file_id
WHERE products_files.file_id = '.$id.' OR texts_files.file_id = '.$id.'';
答案 0 :(得分:0)
您可能需要ON DELETE CASCADE
个功能。但是,请小心使用它,因为它可能会产生令人惊讶的后果:
http://www.mysqltutorial.org/mysql-on-delete-cascade/
如果您在ON DELETE CASCADE
- 查询中添加create table
,则可以从中删除任何项目。如果有任何外键约束,mysql会自动跟随连接并删除另一个表中的条目。
如果你想保持安全(推荐),你需要使用多个删除声明。
答案 1 :(得分:0)
试试这个:
DELETE f1,f2
FROM products_files f1
INNER JOIN texts_files f2 ON f1.file_id = f2.file_id
WHERE f1.file_id = '.$id.';
或强>
使用MySQL外键约束
MySQL foreign key constraints, cascade delete
答案 2 :(得分:0)
您可以通过在*
前加上表名来指定要删除的表:DELETE表。* FROM table1 JOIN table2 JOIN ... WHERE ... WHERE子句指定要删除的行。 / p>
答案 3 :(得分:0)
基本上你的查询对我来说似乎很好(LEFT JOIN除外) - 这不起作用......
DELETE pf
, tf
FROM products_files pf
JOIN texts_files tf
ON tf.file_id = pf.file_id
WHERE pf.file_id = $id;