2017-08-11 42 views
0

任何人都可以幫助我在下面的查詢語法?訪問SQL語法

我不斷收到以下錯誤消息:select語句包含保留字或拼寫錯誤或缺少變量名,或標點符號不正確。

我在一遍又一遍地看,仍然無法找到它。我需要一套新的眼睛:

SELECT [Locations].[Property], 
    [Cores].Location, 
    [Cores].Core, 
    [Keys].Core, 
    Count ([Keys].[Key Seq]) AS [CountOfKey Seq] 
FROM [Cores], [Locations], [Keys] 
WHERE (
    [Cores].Location = [Locations].Location 
    and [Cores].Core = [Keys].Core) 
    and (((Keys.[Key Seq])<>0)) 
GROUP BY Locations.[Property], [Cores].Location, [Cores].Core,[Keys].Core 
HAVING (((Keys.Core)<>"No Lock")) 
UNION SELECT [Locations].[Property], 
    [Cores].Location, 
    [core_crosswalk].related_core as Core, 
    [Keys].[Key Seq], Count ([Keys].[Key Seq]) AS [CountOfKeySeq], 
FROM [Cores], [Locations], [Keys], [core_crosswalk] 
WHERE (
    [Cores].Location = [Locations].Location, 
    and [Cores].Core = [core_crosswalk].core, 
    and [core_crosswalk].related_core = [Keys].Core), 
    and (((Keys.[Key Seq])<>0)) 
GROUP BY Locations.[Property], Cores.Core 
HAVING (((Keys.Core)<>"No Lock")) 
ORDER BY 1, 2, 4; 
+1

在關鍵字UNION之前是否應該有分號? –

+1

你錯過了一個逗號:'[Keys]。[Key Seq] ***,*** count([Keys]。[Key Seq])',但我懷疑有幾個語法問題。嘗試通過將每個部分移動到自己的路線來更好地格式化查詢 - 那麼問題可能會更清晰。 –

+0

'AS([CountOfKey序列])'刪除括號中的別名也 –

回答

0

嘗試以下操作:

SELECT [Locations].[Property], 
    [Cores].Location, 
    [Cores].Core as Core, 
    Count ([Keys].[Key Seq]) AS [CountOfKey Seq] 
FROM ([Cores] INNER JOIN [Locations] ON [Cores].Location = [Locations].Location) 
INNER JOIN [Keys] ON [Cores].Core = [Keys].Core 
WHERE 
    (Keys.[Key Seq]<>0 AND Cores.Core<>"No Lock") 
GROUP BY Locations.[Property], [Cores].Location, [Cores].Core 
UNION 
SELECT [Locations].[Property], 
    [Cores].Location, 
    [cores].Core, 
    Count ([Keys].[Key Seq]) AS [CountOfKeySeq] 
FROM (([Cores] INNER JOIN [Locations] ON [Cores].Location = [Locations].Location) 
INNER JOIN [core_crosswalk] ON [Cores].Core = [core_crosswalk].core) 
INNER JOIN [Keys] ON [core_crosswalk].related_core = [Keys].Core 
WHERE (Keys.[Key Seq]<>0 AND Keys.Core<>"No Lock") 
GROUP BY Locations.[Property], Cores.Core,[Cores].Location 
ORDER BY 1, 2, 4; 

正如你可以看到我已經改了不少,所以你需要檢查它是給你什麼你要。最大的變化是使用JOIN語法而不是WHERE。這使得SQL更具可讀性,並且也是我更改某些字段的原因 - 如果您加入某個字段,則無論您使用哪個表的值,因爲它們是相同的!

我對整潔的緣故組合WHERE和HAVINGs在一起,但你可以把它們分開。

此外,在工會,兩半的類型和數量必須匹配。我不確定[Key Seq]的類型,它聽起來像一個整數索引。如果是,那麼你不能在SELECT中擁有它(這意味着它必須在GROUP BY中),如果你想要[Key Seq]的計數,否則計數將始終爲1.

Now如果您將兩部分分爲不同的查詢,您將能夠在Access查詢設計中查看它們 - 如果您需要重新安排事項,您可能會發現這很有用。

+0

非常感謝!這幾乎是它,但我打算現在分開兩半,以找出我需要重新安排的地方。哇,我希望我更好的SQL和聯接。我要研究你的文章,並嘗試瞭解更多!謝謝 – JDSpencer8

+0

我的榮幸。很高興能夠提供幫助。當我開始時(很多很多年前),我發現在Access Query設計器中設計視圖和SQL視圖之間的切換非常有助於教會我SQL的基本知識。設計器有時會過度複雜化,尤其是WHERE子句,它有時會以奇怪的順序構建連接,但它是一個很好的學習工具。玩的開心! –

+0

運行查詢並查看第1行和第2行。如何組合這兩行並使Key 8計數? 我會繼續努力解決問題,因爲我正在努力學習,這是朝着正確方向邁出的一步,但我仍然需要合併爲每個數字返回的數字,以使計數成爲真正的數字。對於1DD-5核心和位置044A,密鑰計數應該是8 ... 6個操作和2個子主... 我面對的問題是我試圖從關係中的分層數據庫設置數據數據庫,它給我適合...更何況我真的生鏽在我的SQL。 – JDSpencer8