从连接表中删除特定行

时间:2013-12-07 20:06:44

标签: php mysql sql inner-join delete-row

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

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

我想从hotel_list表和tariff_chart表中删除所有数据,其中hotel_id="t16"

4 个答案:

答案 0 :(得分:0)

  

那就是我要删除hotel_list表中的所有数据   tariff_chart表,其中hotel_id =“t16”

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

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

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

然后就这样做:

DELETE FROM hotel_list WHERE HOTEL_ID = "T16";

答案 1 :(得分:0)

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

答案 2 :(得分:0)

phpMyAdmin中创建表格时。您应该为这两个表创建关系,并在On Delete Cascade的集Foreign Key中创建关系。

tariff_chart On Delete Cascade字段的hotel_id制作DELETE FROM hotel_list WHERE HOTEL_ID = "T16"; 的关系视图

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

所以在运行查询时

tariff_chart

将删除{{1}}表

中的所有子记录

答案 3 :(得分:0)

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