例如简化,我有两个表,groups和items.
items (
id,
groupId,
title
)
groups (
id,
groupTitle,
externalURL
)
Run Code Online (Sandbox Code Playgroud)
常规查询我是这样的:
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`)
Run Code Online (Sandbox Code Playgroud)
但是我现在需要修改它,因为指定的所有组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
Run Code Online (Sandbox Code Playgroud)
这可能在一个SQL查询中吗?
Bil*_*win 11
这正是外连接的用途:返回一个表中的所有行,无论另一个表中是否存在匹配的行.在这些情况下,为另一个表的所有列返回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;
Run Code Online (Sandbox Code Playgroud)
只有当这两个 i.id和g.externalURL是NULL,则合并后的结果集的整行应排除在外.
| 归档时间: |
|
| 查看次数: |
325 次 |
| 最近记录: |