【发布时间】:2011-12-13 15:24:47
【问题描述】:
我需要在 SQL Server 中加入 3 个表。这 3 个表基本上具有以下架构:
Users Items UsersItems
+--------+ +--------+-------------+ +--------+--------+-------+
| UserID | | ItemID | Description | | UserID | ItemId | Value |
+--------+ +--------+-------------+ +--------+--------+-------+
| 1 | | 1 | desc1 | | 1 | 1 | 1 |
| 2 | | 2 | desc2 | | 1 | 2 | 2 |
| ... | | ... | desc3 | | 2 | 2 | 1 |
| n | | n | desc4 | | n | 1 | 1 |
+--------+ +--------+-------------+ +--------+--------+-------+
如您所见,Users 和 Items 都可以无限增长,UsersItems 用于表达这两者之间的关系,还包括一个 Value 列。
我需要一个查询来检索所有用户,对于每个用户我需要所有项目及其对应的值。
如果UsersItems 中不存在该关系,则应为该行的Value 列返回 Null(或默认值)。
预期的查询结果应该是:
ResultSet
+--------+--------+-------+
| UserID | ItemID | Value |
+--------+--------+-------+
| 1 | 1 | 1 |
| 1 | 2 | 2 |
| 1 | n | NULL |
| 2 | 1 | NULL |
| 2 | 2 | 1 |
| 2 | n | NULL |
| n | 1 | 1 |
| n | n | NULL |
+--------+--------+-------+
【问题讨论】:
-
阅读 LEFT JOIN 并尝试一下。
-
其实,也请阅读 CROSS JOIN。
-
你要我们做你的功课吗?
-
@Neil 我对连接的维恩图有所了解,我只是不知道如何将其转换为查询,主要是因为我知道我需要的是(U 和 UI)和(I 和 UI ) 但由于这两个不会返回兼容的结果集,所以我不能在它们上调用
Union。 -
@PMV 我会使用
Homework标签。我之所以问,是因为我需要对应用程序进行查询,但不知道该怎么做。
标签: sql sql-server-2005 join