我有两个表,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命令,将非常有帮助。预先感谢。
答案 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)
从不在“ 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;