2011-01-05 97 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