Исключение результатов из запроса SQL на основе записей в нескольких таблицах - PullRequest
0 голосов
/ 09 августа 2011

У меня есть две таблицы в моей базе данных, которые выглядят так

CREATE TABLE IF NOT EXISTS `lab_closure_states`
(
state_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
lab_id INT UNSIGNED NOT NULL,
period_id INT UNSIGNED NOT NULL,
date DATE NOT NULL,
state BOOL NOT NULL
)  ENGINE = MYISAM 
DEFAULT CHARACTER SET = utf8 
COLLATE = utf8_bin;

CREATE TABLE IF NOT EXISTS `lab_appointments`
(
appointment_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
created DATETIME NOT NULL,
user_id INT UNSIGNED NOT NULL,
lab_id INT UNSIGNED NOT NULL,
period_id INT UNSIGNED NOT NULL,
date DATE NOT NULL,
class_size INT UNSIGNED NOT NULL,
comment TEXT NOT NULL,
lab_is_closed BOOL NOT NULL
) ENGINE = MYISAM 
DEFAULT CHARACTER SET = utf8 
COLLATE = utf8_bin;

Можно ли выбрать все встречи для данного пользователя, где состояние не ЛОЖЬ? Сложность, с которой я столкнулся, заключается в том, что у меня не обязательно есть запись lab_closure_state для каждого существующего lab_appointment Спасибо

1 Ответ

0 голосов
/ 09 августа 2011

Не для строгого ответа на текст вашего вопроса, а для ответа на заголовок вопроса:

SELECT *
FROM lab_appointments root
LEFT OUTER JOIN lab_closure_states satellite 
    ON  satellite.lab_id = root.lab_id
    AND satellite.state = 0
WHERE 
    satellite.state_id IS NULL

Подход, показанный выше, дает вам возможность связать несколько спутниковых таблиц в вашем запросе и построить сложные критерии фильтрапросто поместив IS NULL или IS NOT NULL в оператор WHERE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...