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

Для получения всех проектов, у которых нет связи с определенным пользователем через вторую таблицу, можно воспользоваться оператором NOT EXISTS или оператором LEFT JOIN с клозом WHERE IS NULL.

1. С использованием оператора NOT EXISTS:

SELECT p.*
FROM projects p
WHERE NOT EXISTS (
    SELECT 1
    FROM user_projects up
    WHERE up.project_id = p.id
    AND up.user_id = <идентификатор_пользователя>
);

В этом запросе мы выбираем все поля из таблицы "projects" (предполагая, что названия столбцов такие же, как и в примере), и для каждого проекта проверяем, существует ли связь с указанным пользователем через таблицу "user_projects". Если не существует ни одной записи в таблице "user_projects" для данного проекта и указанного пользователя, то этот проект будет включен в результат.

2. С использованием оператора LEFT JOIN и проверки IS NULL:

SELECT p.*
FROM projects p
LEFT JOIN user_projects up ON up.project_id = p.id AND up.user_id = <идентификатор_пользователя>
WHERE up.project_id IS NULL;

В этом запросе мы объединяем таблицы "projects" и "user_projects" через оператор LEFT JOIN, указываем условие "up.project_id = p.id AND up.user_id = <идентификатор_пользователя>" для соединения, и затем добавляем условие "up.project_id IS NULL" для выбора только тех проектов, для которых не существует связи с указанным пользователем.

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