F.P*_*F.P 1 sql sql-server join
我有几张桌子(确切地说,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 |
-----------------------------------------
Run Code Online (Sandbox Code Playgroud)
表"包"
----------------------
| ID | Name |
----------------------
| 100340 | Testpackage |
| 100341 | Package xy |
----------------------
Run Code Online (Sandbox Code Playgroud)
我完成了交叉连接,但是当没有Package指定ID时Actions,该包上的所有操作都完全丢失,而不仅仅是Name留空 - 这正是我想要的.
因此,如果缺少引用,只需将相应的连接列留空或作为空字符串......:
----------------------------------------------------------------------
| Package ID | Name | Action 0 | Action 2 | Action 4 | Action 12 |
----------------------------------------------------------------------
| 100340 | Testpackage | OK | OK | | Error |
| 100341 | Package xy | Error | | OK | OK |
----------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
怎么可能?
编辑
对不起,我刚看到我的示例是完全错误的,我更新了它最终应该是什么样子.
我当前的查询看起来像这样(如上所述,只是一个提取,因为实际的查询是大约三倍,包括更多的表)
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
Run Code Online (Sandbox Code Playgroud)
那么为什么你不能只做一个外部JOIN,例如:
SELECT `Package ID`, Name, `Action Type`, `Action Date`
FROM Actions
LEFT OUTER JOIN Packages
ON Actions.`Package ID` = Packages.`Package ID`
Run Code Online (Sandbox Code Playgroud)
?