我有三个查询,每个查询返回一个列。
SELECT Name FROM Tenant
SELECT Name FROM Space
SELECT ID FROM Contracts
表的定义如下:
Tenant (ID, Name)
Space (ID, Name, TenantID)
Contracts (ID, TenantID)
这些表格中的信息包括:
+----+---------+
| id | name |
+----+---------+
| 1 | Tenant1 |
| 2 | Tenant2 |
| 3 | Tenant3 |
+----+---------+
+----+------+----------+
| id | name | tenantID |
+----+------+----------+
| 1 | S1 | 1 |
| 2 | S2 | 1 |
| 3 | S3 | 2 |
| 4 | S4 | 3 |
| 5 | S5 | 3 |
+----+------+----------+
+----+----------+
| id | tenantID |
+----+----------+
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
| 4 | 2 |
| 5 | 2 |
| 6 | 3 |
+----+----------+
我该如何编写查询语句来实现以下结构?
+----------+-------+----------+
| tenant | space | contract |
+----------+-------+----------+
| tenant 1 | S1 | 1 |
| | S2 | 2 |
| tenant 2 | S3 | 3 |
| | | 4 |
| | | 5 |
| tenant 3 | S4 | 6 |
| | S5 | |
+----------+-------+----------+
我在租户和合同表之间建立了链接,但我不希望它们考虑租户之间的空格,并且我不希望任何列中的值重复。
我尝试使用连接,但如果它们之间存在匹配,它们显然会复制列中的值。
SELECT T.NAME 'Tname',
S.NAME 'Sname',
C.ID
FROM Tenant T
LEFT JOIN Space S
ON T.ID = S.TenantID
LEFT JOIN Contracts C
ON T.ID = C.TenantID
我也尝试将其关联到子查询中,并使用
ROW_NUMBER()
和一些CASE
语句来实现所需的格式,但并不成功。这里有一个带有一些示例数据的SQLFiddle。
非常感谢任何建议/评论或有用的链接。