【问题标题】:How to delete records from a table if they don't meet a condition in another table如果不满足另一个表中的条件,如何从表中删除记录
【发布时间】:2019-11-01 05:51:47
【问题描述】:

我有两张表,company 和 company_name。 company 包含列:company_id(主键)和 company_name,而 company_name 包含列:company_id(来自公司表的外键)、company_name 和 is_proper。目前,company 表填充了几条记录,但我希望只保留出现在 is_proper = 1 的表和记录中的 company_names。

示例公司表

company_id    company_name
1             Apple
2             Apple Inc.
3             Fcebook   
4             Facebook
5             Facebook Inc. 
6             Google Inc.

公司名称表示例:

company_id    company_name    is_proper
2             Apple           0
2             Apple Inc.      1
5             Fcebook         0
5             Facebook        0
5             Facebook Inc.   1
6             Google Inc.     1

我希望公司表看起来像什么:

company_id    company_name
2             Apple Inc.
5             Facebook Inc.
6             Google Inc.

如果有人知道执行此操作的 SQL 命令,那将非常有帮助。提前致谢。

【问题讨论】:

  • 您要从哪个表中删除行?
  • 我想从公司表中删除行。 @forpas
  • 这是我的想法,但很高兴澄清一下。看我的回答。

标签: sql sql-server


【解决方案1】:

NOT EXISTS:

delete c from company c
where not exists (
  select 1 from company_name 
  where company_id = c.company_id and company_name = c.company_name and is_proper = 1
)

请参阅demo
结果:

> company_id | company_name 
> ---------: | :------------
>          2 | Apple Inc.   
>          5 | Facebook Inc.
>          6 | Google Inc. 

【讨论】:

    【解决方案2】:

    您可以join 表格并添加条件is_proper = 0

    delete from
    company_name as cn
    join company as c
        on cn.company_name = c.company_name
        and cn.is_proper = 0
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      MySQL

      delete from company_table ct where 
      ct.company_name in (select cn.`company_name` from company_name cn where is_proper = 0)
      

      【讨论】:

      • 感谢回复,但是这样不会删除is_proper = 1的记录吗?
      【解决方案4】:

      对于这个操作,你可以尝试在 SQL 中使用 JOIN 和 WHICH 操作。

      一个示例语法是:

      DELETE DeletingFromTable
           FROM DeletingFromTable INNER JOIN CriteriaTable
           ON DeletingFromTable.field_id = CriteriaTable.id
           WHERE CriteriaTable.criteria = "value";
      

      要删除基于另一个表的记录:

          Delete From Table1 a,Table2 b where a.id=b.id
      
              Or
      
                DELETE FROM Table1
              WHERE Table1.id IN (SELECT Table2.id FROM Table2)
      
            Or
      
                  DELETE Table1
               FROM Table1 t1 INNER JOIN Table2 t2 ON t1.ID = t2.ID;
      

      【讨论】:

        【解决方案5】:

        你可以这样做 MySQL

        DELETE FROM COMPANY WHERE COMPANY_ID NOT IN (SELECT COMPANY_ID FROM COMPANY_NAME WHERE IS_PROPER=1);;

        【讨论】:

        • 您为什么要还原编辑?标题没有理由加粗,而且将查询放在代码块中看起来更好。
        猜你喜欢
        • 1970-01-01
        • 2012-10-27
        • 2015-10-13
        • 2014-07-09
        • 1970-01-01
        • 2021-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多