【发布时间】:2009-12-09 12:41:05
【问题描述】:
我有几个表(确切地说是 7 个)我交叉连接的表。这部分给我带来了一些问题;
表格“操作”
-----------------------------------------
| ID | Package ID | Action Type | Message |
-----------------------------------------
| 40 | 100340 | 0 | OK |
| 41 | 100340 | 12 | Error |
| 42 | 100340 | 2 | OK |
| 43 | 100341 | 4 | OK |
| 44 | 100341 | 0 | Error |
| 45 | 100341 | 12 | OK |
-----------------------------------------
表“包”
----------------------
| ID | Name |
----------------------
| 100340 | Testpackage |
| 100341 | Package xy |
----------------------
我完成了交叉连接,但是当没有Package 并在Actions 中指定ID 时,该包上的所有操作都完全丢失,而不仅仅是留下Name 空白 - 这就是我的意思试图得到。
因此,如果缺少引用,只需将相应的连接列留空或作为空字符串...:
----------------------------------------------------------------------
| Package ID | Name | Action 0 | Action 2 | Action 4 | Action 12 |
----------------------------------------------------------------------
| 100340 | Testpackage | OK | OK | | Error |
| 100341 | Package xy | Error | | OK | OK |
----------------------------------------------------------------------
这怎么可能?
编辑
抱歉,我刚刚看到我的示例完全错误,我更新了它最终的样子。
我当前的查询看起来像这样(如上所述,只是一个提取,因为实际查询的长度大约是包括更多表的三倍)
SELECT
PackageTable.ID AS PackageID,
PackageTable.Name,
Action0Table.Message AS Action0,
Action2Table.Message AS Action2,
Action4Table.Message AS Action4,
Action12Table.Message AS Action12
FROM
Packages AS PackageTable LEFT OUTER JOIN
Actions AS Action0Table ON PackageTable.ID = Action0Table.PackageID LEFT OUTER JOIN
Actions AS Action2Table ON PackageTable.ID = Action2Table.PackageID LEFT OUTER JOIN
Actions AS Action4Table ON PackageTable.ID = Action4Table.PackageID LEFT OUTER JOIN
Actions AS Action12Table ON PackageTable.ID = Action12Table.PackageID
WHERE
Action0Table.ActionType = 0 AND
Action2Table.ActionType = 2 AND
Action4Table.ActionType = 4 AND
Action12Table.ActionType = 12
【问题讨论】:
-
请注意,您使用的不是CROSS JOINS,而是LEFT OUTER JOINS。
标签: sql sql-server join