从联接表中删除特定行


Delete a specific row from a joined table

SELECT * 
FROM hotel_list h
INNER JOIN tariff_chart t ON h.hotel_id = t.hotel_id
WHERE t.hotel_id = "t16"

我想在我的 sql 中删除这个结果行,代码是什么?

也就是说,我想从表中删除所有数据hotel_listtariff_chart表中,其中hotel_id="t16"

DELETE FROM hotel_list h, tariff_chart t WHERE h.hotel_id = t.hotel_id AND t.hotel_id = "t16"

您可以在 mysql 参考站点上检查多表删除的确切语法 - http://dev.mysql.com/doc/refman/5.0/en/delete.html

DELETE hotel_list
FROM hotel_list h
INNER JOIN tariff_chart t ON h.hotel_id = t.hotel_id
WHERE t.hotel_id = "t16"

phpMyAdmin 中创建表时。 您应该与这两个表以及Foreign Key的设置On Delete Cascade创建关系。

tariff_charthotel_id字段制作On Delete Cascade的关系视图中

因此,当您删除父表中的记录时,它将自动删除子表中的所有子记录

所以在运行查询时

DELETE FROM hotel_list WHERE HOTEL_ID = "T16";

将从表中删除tariff_chart子记录

也就是说我想从表中删除所有数据hotel_list并且 tariff_chart表,其中 hotel_id="t16">

首先,我认为没有理由在这里使用join

您应该在hotel_list表的hotel_id主键上应用 ON DELETE CASCADE 选项,以便删除所有"子"行(外键(,如tariff_chart表中的行。

如果指定此选项,则在删除父表中的行时,数据库服务器也会删除子表中与该行(外键(关联的任何行。ON DELETE CASCADE 选项的优点是,它允许您减少执行删除操作所需的 SQL 语句的数量。

然后就这样做:

DELETE FROM hotel_list WHERE HOTEL_ID = "T16";