2011-01-05 8 views
1

私は次の問題があります。MySQLのクエリの問題

私は2つのInnoDBテーブル: 'places'と 'events'を持っています。ある場所には多くのイベントがありますが、でもイベントは場所を入力せずに作成できます。この場合、イベントの外部キーはNULLです。次のようにテーブルの

簡易構造が見えます:

CREATE TABLE IF NOT EXISTS `events` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) COLLATE utf8_bin NOT NULL, 
    `places_id` int(9) unsigned DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `fk_events_places` (`places_id`), 
) ENGINE=InnoDB; 
ALTER TABLE `events` 
    ADD CONSTRAINT `events_ibfk_1` FOREIGN KEY (`places_id`) REFERENCES `places` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION; 

CREATE TABLE IF NOT EXISTS `places` (
    `id` int(9) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) COLLATE utf8_bin NOT NULL, 
    PRIMARY KEY (`id`), 
) ENGINE=InnoDB; 

質問には、対応する場所(または値なしのイベントと名の名前が含まれているクエリを作成する方法、である、場合にノーがあります場所は割り当てられましたか?)

私は2つのクエリでそれを行うことができますが、私は目に見えない場所から離れたものから割り当てられた場所を持つイベントを分けています。

本当にありがとうございました。

答えて

3

(RIGHT OUTER JOINをするために、または右)、左のテーブルを外部結合で

SELECT events.col1, events.col2, places.name 
    FROM events LEFT OUTER JOIN places 
     ON events.places_id = places.id 

を外部結合を使用して結果セットを制御します。他のテーブルの一致する値は一致が見つかった場合に指定され、そうでない場合はNULLになります。

+0

ありがとうございました!!!! – Luke