@REDkiy

Как будет выглядеть запрос SQL с проверкой совпадения условия в связанной таблице?

Задача такая:
Есть две таблицы - User и Control. Связанны между собой как один ко многим.
Пользователь "проходит" контрольные точки. При "прохождении" точка "закрывается". Пользователю может быть назначено несколько точек. Пользователь считается активным если хотя бы одна точка не закрыта.

Как будет выглядеть запрос для выбора всех НЕактивных пользователей.

Буду очень признателен если сможете привести пример как на SQL, так и в нотации SQLAlchemy.
  • Вопрос задан
  • 651 просмотр
Пригласить эксперта
Ответы на вопрос 2
longclaps
@longclaps
CREATE TABLE User (id INT PRIMARY KEY);
INSERT INTO User VALUES (1), (2), (3);

CREATE TABLE Control (
  name    TEXT,
  user_id INT,
  checked BOOLEAN NOT NULL,
  FOREIGN KEY (user_id) REFERENCES User (id)
) DEFAULT CHARSET = utf8;
INSERT INTO Control VALUES ("наломать дров", 1, TRUE), ("курить бамбук", 3, FALSE);

SELECT DISTINCT User.id
FROM User JOIN Control ON User.id = Control.user_id
WHERE NOT Control.checked;
Ответ написан
Комментировать
axaxa_man
@axaxa_man
web developer
SELECT * FROM USER WHERE id NOT IN (
SELECT user_id FROM control WHERE status = "OPEN"
)

1. Смотрим тех пользователей, у которых открыты точки
2. Показываем тех пользователей, которые не пользователи из пункта 1.
3. Профит
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы