当前位置:  开发笔记 > 数据库 > 正文

如何使用连接查询两个表并从一个表中获取所有行,从另一个表中获取相关行?

如何解决《如何使用连接查询两个表并从一个表中获取所有行,从另一个表中获取相关行?》经验,为你挑选了1个好方法。

例如简化,我有两个表,groupsitems.

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查询中吗?



1> Bill Karwin..:

这正是外连接的用途:返回一个表中的所有行,无论另一个表中是否存在匹配的行.在这些情况下,为另一个表的所有列返回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.idg.externalURL是NULL,则合并后的结果集的整行应排除在外.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有