如果它们不满足另一个表中的条件,如何从一个表中删除记录

时间:2019-06-18 14:37:12

标签: sql sql-server

我有两个表,company和company_name。 company包含列:company_id(主键)和company_name,而company_name包含列:company_id(公司表中的外键),company_name和is_proper。当前,公司表中填充了几条记录,但是我只希望保留同时出现在表和记录中的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命令,将非常有帮助。预先感谢。

5 个答案:

答案 0 :(得分: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. 

答案 1 :(得分:0)

您可以这样做:

  

MySQL

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

答案 2 :(得分:0)

您可以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 :(得分:0)

您可以执行此MySQL

从不在“ COMPANY_ID”中的公司删除(从“在IS_PROPER = 1中从COMPANY_NAME中选择COMPANY_ID”);

答案 4 :(得分:0)

对于此操作,您可以尝试并假设在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;