【问题标题】:Delete a specific row from a joined table从联接表中删除特定行
【发布时间】:2013-12-07 20:06:43
【问题描述】:
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"

【问题讨论】:

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


    【解决方案1】:

    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】:
      DELETE hotel_list
      FROM hotel_list h
      INNER JOIN tariff_chart t ON h.hotel_id = t.hotel_id
      WHERE t.hotel_id = "t16"
      

      【讨论】:

        【解决方案3】:

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

        tariff_chart 的关系视图中为hotel_id 字段生成On Delete Cascade

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

        所以在运行查询时

        DELETE FROM hotel_list WHERE HOTEL_ID = "T16";
        

        将从tariff_chart 表中删除所有子记录

        【讨论】:

          【解决方案4】:

          那是我想从 hotel_list 表中删除所有数据,然后 关税图表表,其中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";
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-12-10
            • 1970-01-01
            • 2014-06-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多