Как удалить записи из таблицы, если они не соответствуют условию в другой таблице - PullRequest
0 голосов
/ 18 июня 2019

У меня есть две таблицы, company и company_name.Компания содержит столбцы: company_id (первичный ключ) и company_name, а company_name содержит столбцы: company_id (внешний ключ из таблицы компании), company_name и is_proper.В настоящее время таблица компании заполнена несколькими записями, но я хочу сохранить только имена компаний, которые отображаются в таблицах и записях, где is_proper = 1.

Пример таблицы компаний

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 ]

1 голос
/ 18 июня 2019

С 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
)

См. Демоверсию .
Результаты:

> company_id | company_name 
> ---------: | :------------
>          2 | Apple Inc.   
>          5 | Facebook Inc.
>          6 | Google Inc. 
0 голосов
/ 18 июня 2019

Для этой операции вы можете попробовать использовать операции JOIN и WHICH, предполагая, что это в SQL.

Пример синтаксиса для этого:

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;
0 голосов
/ 18 июня 2019

Вы можете сделать это MySQL

УДАЛИТЬ ИЗ КОМПАНИИ, ГДЕ КОМПАНИЯ НЕ ВХОДИТ (ВЫБЕРИТЕ КОМПАНИЮ_ID ИЗ КОМПАНИИ_ИМЯ, ГДЕ IS_PROPER = 1) ;;

0 голосов
/ 18 июня 2019

Вы можете 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
0 голосов
/ 18 июня 2019

Вы можете сделать это:

MySQL

delete from company_table ct where 
ct.company_name in (select cn.`company_name` from company_name cn where is_proper = 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...