2011-08-09 8 views
0

私はこの除く結果

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; 

ようになり、私のデータベースにある2つのテーブルを持っている状態がFALSEではありません特定のユーザーのすべての予定を選択することが可能ですか?私が持っている合併症は、それぞれがlab_appointmentのために必ずlab_closure_stateのエントリを持っているとは限りません。 おかげ

+0

lab_closure_stateエントリのないエントリをスキップしますか? – sll

答えて

0

あなたの質問テキストに厳密な答えを意味するのではなく、質問ヘッダに応答しない:上記のよう

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 NULLWHEREステートメントに入れるだけでよい。

+0

これはうまくいきます。ありがとう! – nickles