2011-01-05 232 views
1

好的,我有以下問題。MySQL查詢問題

我有兩個InnoDB表:「地點」和「事件」。一個地方可以有很多事件,但是事件可以在沒有輸入的地方創建。在這種情況下,事件的外鍵是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; 

的問題是,如何構建查詢包含相應的地方(或沒有價值的事件和名稱的名字,如果沒有分配的地點?)

我可以用兩個查詢做到這一點,但是我明顯地將事件分離出來,這些事件都是從沒有地方的地方分配的。

幫助真的很感激。

回答

3

使用外連接

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

在一個OUTER JOIN,左側的表(或右,爲RIGHT OUTER JOIN)控制的結果集。在找到匹配的地方提供來自其他表的匹配值,否則這些值爲NULL。

+0

非常感謝!!!! – Luke 2011-01-05 22:02:33