SQL - пытаемся получить то, чего не существует

Две связанные таблицы - задачи и действия. Для каждой активной задачи должно быть одно связанное открытое действие. Пытаюсь найти задачи без открытых действий. К вашему сведению, статус активности включает "Открыто", "Завершено" и "Отменено". Статус задачи - Активный и Неактивный.

Относительный новичок в мире SQL, хотя у него есть основные принципы.

Подумал что-то вроде SELECT * from Tasks WHERE Status = Active И количество связанных действий со Status of Open = 0, но я не уверен, как перевести это в SQL.

Прочитал здесь и в других местах несколько сообщений о временных таблицах и внешних соединениях, но я не мог с этим разобраться - полагаю, это было для аудитории немного более продвинутой, чем я.

Любая помощь приветствуется!

Как бы вы выразили «количество связанных действий со статусом открытия» в SQL?

Nicholas Hunter 05.04.2021 20:36

Привет, Рикардо, не могли бы вы поделиться данными таблицы вместе с именами столбцов. Это поможет другим лучше понять и поможет вам

mishsx 05.04.2021 20:36

Я еще не видел вашу таблицу, но, возможно, вы пытаетесь написать это, если это поможет: Select * From Tasks Where Status = Active AND Open = 0

mishsx 05.04.2021 20:38

Может быть, просто ВЫБРАТЬ * из задачи, ГДЕ Статус = Активен И НЕ СУЩЕСТВУЕТ (ВЫБРАТЬ * ИЗ Действия, ГДЕ Activity.Task_Id = Task.Id)

Nicholas Hunter 05.04.2021 20:39

Ух ты, количество и скорость ответов просто потрясающие - отличное и активное сообщество! Спасибо Николасу и mishsx; Между ними и Гордоном внизу, я думаю, мы отправимся на скачки.

RicardoB 06.04.2021 16:29
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
5
31
1

Ответы 1

Trying to find tasks with no Open activities.

Используйте not exists:

select t.*
from tasks t
where not exists (select 1
                  from activities a
                  where a.task_id = t.task_id and
                        a.status = 'open'
                 );

Спасибо, Гордон - я верю, что это сделает именно то, что нам нужно. Как я уже упоминал выше, приятно удивлен активностью сообщества - я уверен, что буду использовать ее с пользой в будущем и, возможно, однажды внесу ответ или два. Еще раз спасибо всем!

RicardoB 06.04.2021 16:31

Другие вопросы по теме