Как выбрать записи из одной таблицы, для которых значения в связанной таблице не равны определенному значению?

Как можно выбрать все записи из таблицы "messages", которые не были прокомментированы автором с определенным идентификатором (например, 100), учитывая связь один-ко-многим между таблицами через поля "message_id" и "id" соответственно? Возможно, следует использовать запрос SELECT с условием WHERE для проверки значения "author_id".
  • 30 июля 2024 г. 12:43
Ответы на вопрос 2
Да, для этого можно использовать запрос SELECT с условием WHERE и оператором NOT IN или NOT EXISTS. Ниже приведены два варианта запроса для выбора всех записей из таблицы "messages", которые не были прокомментированы автором с идентификатором 100:

1. Используя оператор NOT IN:

```sql
SELECT * 
FROM messages
WHERE author_id <> 100
AND message_id NOT IN (
    SELECT id
    FROM comments
    WHERE author_id = 100
);
```

2. Используя оператор NOT EXISTS:

```sql
SELECT m.* 
FROM messages m
WHERE author_id <> 100
AND NOT EXISTS (
    SELECT 1
    FROM comments c
    WHERE m.message_id = c.id
    AND c.author_id = 100
);
```

Оба этих запроса выберут все записи из таблицы "messages", у которых значение "author_id" не равно 100 и которые не были прокомментированы автором с идентификатором 100. Вам нужно выбрать подходящий вариант в зависимости от вашей спецификации и предпочтений.
Буквально так и пишется дай messages для который нет вот таких 
select ... from messages where not exists (select from comments where comments.message_id = messages.id and comments.author_id = 100);
Похожие вопросы