例如简化,我有两个表,groups
和items
.
items ( id, groupId, title ) groups ( id, groupTitle, externalURL )
常规查询我是这样的:
SELECT i.`id`, i.`title`, g.`id` as 'groupId', g.`groupTitle`, g.`externalURL` FROM items i INNER JOIN groups g ON (i.`groupId` = g.`id`)
但是我现在需要修改它,因为指定的所有组externalURL
都不会在items
表中有任何相应的记录(因为它们存储在外部).是否可以进行某种连接,以便输出看起来像这样:
items: id title groupId ---------------------- 1 Item 1 1 2 Item 2 1 groups id groupTitle externalURL ------------------------------- 1 Group 1 NULL 2 Group 2 something 3 Group 3 NULL Query output: id title groupId groupTitle externalURL --------------------------------------------------- 1 Item 1 1 Group 1 NULL 2 Item 2 1 Group 1 NULL NULL NULL 2 Group 2 something -- note that group 3 didn't show up because it had no items OR externalURL
这可能在一个SQL查询中吗?
这正是外连接的用途:返回一个表中的所有行,无论另一个表中是否存在匹配的行.在这些情况下,为另一个表的所有列返回NULL.
您可以在WHERE子句中处理的另一个条件.
SELECT i.`id`, i.`title`, g.`id` as 'groupId', g.`groupTitle`, g.`externalURL` FROM items i RIGHT OUTER JOIN groups g ON (i.`groupId` = g.`id`) WHERE i.`id` IS NOT NULL OR g.`externalURL` IS NOT NULL;
只有当这两个 i.id
和g.externalURL
是NULL,则合并后的结果集的整行应排除在外.