我有几个表(确切地说,7个)我交叉连接的表。这部分给了我一些问题;SQL Server可选连接
表 “操作”
-----------------------------------------
| 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 |
----------------------
我完成跨joingin THM,但在没有Package
在Actions
指定的ID,所有对该软件包的操作完全缺失,而不仅仅是空着 - 这正是我想要得到的结果。
所以,如果参考丢失,只留下相应的联接的列空白或为空字符串...:
----------------------------------------------------------------------
| Package ID | Name | Action 0 | Action 2 | Action 4 | Action 12 |
----------------------------------------------------------------------
| 100340 | Testpackage | OK | OK | | Error |
| 100341 | Package xy | Error | | OK | OK |
----------------------------------------------------------------------
这怎么可能?
编辑
对不起,我刚才看到我的例子是completety错了,我更新了它应该如何看起来像到底。
我当前的查询看起来是这样的(如上面所说的,就像一个实际的三倍左右,只要其中甚至包括多个表的提取物)
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
你能发表查询吗? – peacedog 2009-12-09 12:52:42
请注意,您未使用CROSS JOINS,您正在使用LEFT OUTER JOINS。 – 2009-12-09 13:31:37