2012-05-25 104 views
0

我有這四個表:SQL查詢不工作

SELECT [B_Key] 
    ,[B_FiscalYear] 
    ,[B_OrgCode] 
    ,[B_SubObject] 
    ,[B_Explanation] 
    ,[B_CIPrefNo] 
    ,[B_OrgBudgetAmt] 
    ,[B_BudgetAmt] 
    ,[B_Initials] 
FROM [NAOLI].[dbo].[BudgetTbl] 

SELECT [F_Fykey] 
    ,[F_FiscalYear] 
    ,[F_Year] 
FROM [NAOLI].[dbo].[codeFiscalYearTbl] 

SELECT [O_OrgKey] 
    ,[O_OrgCode] 
    ,[O_OrgDesc] 
    ,[O_Divisions] 
FROM [NAOLI].[dbo].[codeOrgCodeTbl] 

SELECT [S_SubKey] 
    ,[S_SubObject] 
    ,[S_SubDescrip] 
FROM [NAOLI].[dbo].[codeSubObjectTbl] 

我需要不同部分的這些表中的信息,以使下面的信息表結合起來:

[B_FiscalYear] 
    ,[O_OrgCode] 
    ,[O_OrgDesc] 
    ,[S_SubObject] 
    ,[S_SubDescrip] 
    ,[B_BudgetAmt] 
    ,[B_Initials] 
    ,[B_CIPrefNo] 
    ,[B_OrgBudgetAmt] 

我嘗試了下面的查詢,但它返回了20750條記錄中的0。我該如何實現這一目標?感謝

SELECT [B_FiscalYear] 
    ,[B_OrgCode] 
    ,[O_OrgDesc] 
    ,[B_SubObject] 
    ,[S_SubDescrip] 
    ,[B_BudgetAmt] 
    ,[B_Initials] 
    ,[B_CIPrefNo] 
    ,[B_OrgBudgetAmt] 

INTO dbo.BudgetsTbl 
    FROM [BudgetTbl] BT, [codeFiscalYearTbl] FY, [codeOrgCodeTbl] OC, [codeSubObjectTbl] SO 
WHERE BT.B_FiscalYear = FY.F_Year and BT.B_OrgCode = OC.O_OrgCode and BT.B_SubObject = SO.S_SubObject 
+1

不知道數據是什麼樣的,這將是一個難以解決的問題。我建議從一個表中選擇數據(從BudgetTbl開始),然後每次向結果添加一個連接表,直到找出哪個連接約束導致數據遺漏爲止。確保你選擇了合適的連接方法(左,右等)。 –

+1

除了使用隱式'JOIN's(你應該使用適當的顯式'JOIN's),你的查詢應該沒問題。你確定你可以將這些表加入這些列嗎? – Lamak

+0

執行查詢時是否收到任何錯誤消息?或者它只是報告「0行受到影響」? (取決於你使用的SQL數據庫的風格) – Tony

回答

0

正確的聯接語法是:

SELECT [B_FiscalYear], [B_OrgCode], [O_OrgDesc], [B_SubObject], [S_SubDescrip], 
     [B_BudgetAmt], [B_Initials], [B_CIPrefNo], [B_OrgBudgetAmt] 
INTO dbo.BudgetsTbl 
FROM BudgetTbl BT join 
    codeFiscalYearTbl FY 
    on BT.B_FiscalYear = FY.F_Year join 
    codeOrgCodeTbl OC 
    on BT.B_OrgCode = OC.O_OrgCode join 
    codeSubObjectTbl SO 
    on BT.B_SubObject = SO.S_SubObject 

據推測,一個或一個以上的查找表是空的。如果你想要所有的行,在上面的查詢中將「join」替換爲「left outer join」。

+0

非常感謝!需要左外連接像一個迷人的工作,我會標記爲答案。 – developthestars

1

的加入應該是這樣的:

SELECT [B_FiscalYear] 
    ,[B_OrgCode] 
    ,[O_OrgDesc] 
    ,[B_SubObject] 
    ,[S_SubDescrip] 
    ,[B_BudgetAmt] 
    ,[B_Initials] 
    ,[B_CIPrefNo] 
    ,[B_OrgBudgetAmt] 
FROM BudgetTbl BT 
JOIN codeFiscalYearTbl FY ON BT.B_FiscalYear = FY.F_Year 
JOIN codeOrgCodeTbl OC ON BT.B_OrgCode = OC.O_OrgCode 
JOIN codeSubObjectTbl SO ON BT.B_SubObject = SO.S_SubObject 

你可以看一下http://sqlfiddle.com/#!3/8ff6b/7獲取更多信息。 也可以根據需要添加左連接。