Эффективный способ удаления строк с пустым столбцом, если существует более одной строки - PullRequest
0 голосов
/ 08 ноября 2018

Я разрабатываю приложение, которое использует базу данных SQLite.

Учитывая следующий набор данных:

1 | TEST1 | <NULL>
2 | TEST1 | TEST1
3 | TEST1 | <NULL>
4 | TEST1 | TEST123
...

Я хочу удалить строки с NULL, если есть хотя бы одна строка с TEST1.

В приведенном выше примере желаемый результат:

2 | TEST1 | TEST1
4 | TEST1 | TEST123
...

И для следующего примера:

1 | TEST1 | <NULL>
2 | TEST1 | TEST123
...

Требуемый результат аналогичен приведенному выше.

На мой взгляд, у меня есть несколько вариантов:

  1. Избегайте операторов INSERT для строк, если существует такое условие, как в первом примере.
  2. УДАЛИТЬ строки после того, как они уже были вставлены.

Не могли бы вы посоветовать, как реализовать каждый из этих вариантов?

Спасибо!

1 Ответ

0 голосов
/ 08 ноября 2018

Что-то вроде этого?

select t.*
from t
where t.col3 is not null
union all
select t
from t
where t.col3 is null and
      not exists (select 1 from t t2 where t2.col2 = t.col2 and t2.col3 is not null);

То есть выберите все ненулевые значения.Затем выберите пустые значения, если других значений нет.

Если вы удаляете строки, то:

delete from t
    where t.col3 is null and
          exists (select 1 from t t2 where t2.col2 = t.col2 and t2.col3 is not null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...