2017-08-11 8 views
0

誰でも次のクエリの構文を教えてもらえますか?Access 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 Seq])'はあなたのエイリアスのかっこも削除します –

答えて

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; 

あなたが見ることができるように私はそれをかなり変更したので、あなたはそれがあなたに何を与えていることを確認する必要がありますあなたは欲しい。最大の変更は、WHEREの代わりにJOIN構文を使用することです。これにより、SQLがはるかに読みやすくなりました。また、フィールドの一部を変更した理由もありました。フィールドに参加すると、同じテーブルなので、どのテーブルの値を取っても問題ありません。

私はWHEREとHAVINGを一緒に組み合わせてきれいにしましたが、あなたはそれらを分けることができます。

また、組合では、両方の半分の型と数が一致しなければなりません。私は[Key Seq]のタイプについて確信が持てませんでしたが、整数インデックスのように私には聞こえました。そうであれば、[Key Seq]のカウントを必要とするならば、SELECTにそれを持たせることはできません(つまり、GROUP BYになければなりません)。そうでなければ、カウントは常に1になります。

Now 2つの半分を別々のクエリに分割すると、それらをAccess Query Designで表示することができます。再配置が必要な場合は、これが便利です。

+0

ありがとうございます!これはほとんどの場合ですが、ここで2つの半分を分けて再配置が必要な場所を見つけようとしています。うわー、私はSQLと結合をうまく使いたいと思っています。私はあなたの投稿を勉強し、もっと学ぶつもりです!ありがとうございます – JDSpencer8

+0

私の喜び。喜んで助けることができました。私が(多くの、何年も前に)始まったとき、私はSQLの基本を教えるのに本当に役立つAccess QueryデザイナーのDesign ViewとSQL Viewの間の切り替えを発見しました。デザイナーは、特にWHERE句を使用すると、複雑すぎることがあり、時には奇妙な順序で結合を作成することもありますが、これは素晴らしい学習ツールです。楽しむ! –

+0

クエリを実行し、1行目と2行目を見てみましょう。これらの2行をどのように組み合わせて、キー8のカウントを作成しますか? 私は勉強しているうちにこの問題を解決し続けるつもりですが、これは正しい方向に進んでいますが、それぞれの数値を組み合わせて真の数にする必要があります。 1DD-5コアとロケーション044Aの場合、キー数は8​​〜6の操作と2つのサブマスターでなければなりません.... 私が直面している問題は、リレーショナルの階層データベースからデータを設定しようとしていることですデータベース、それは私にフィット感を与えている...私は本当に私のSQLで錆びていることは言うまでもありません。 – JDSpencer8