2011-11-02 25 views
9

私のアプリケーションで使用するデータベースには、スペースを含むフィールド名があります。私はこれが私の問題の原因だと信じています。一般的なクエリは次のとおりです。SQLクエリ構文エラー - フィールド名の空白

SELECT * FROM 'OV2 BAS' AS bas 
INNER JOIN 'OV2 RefID' AS ids ON 'bas.Ref ID' = 'ids.Ref ID' 
WHERE ids.ENUM_H = 'TDischarge'; 

フィールド名のスペースはどのように扱いますか?ありがとう。

追加情報

これは、MS Access 2007の(Microsoft.ACE.OLEDB.12.0)で作られたデータベースにアクセスすることです。

+1

どのRDBMSを使用していますか? –

+0

これは、MS Access 2007(Microsoft.ACE.OLEDB.12.0)で作成されたデータベースにアクセスするためのものです。 –

答えて

12

私は実際のテーブル名を引用符で囲むことはできません。あなたが割り当てた名前だけ。代わりに大括弧で表を囲みます。[OV2 BAS]

また、結合構文の前後に引用符を付けることもできません。代わりにこれを試してください:

SELECT * FROM [OV2 BAS] AS bas INNER JOIN [OV2 RefID] AS ids ON bas.[Ref ID] = ids.[Ref ID] WHERE ids.ENUM_H = 'TDischarge'; 
9

postgreSQLの、オラクル

  • 'を置き換えます"
  • MySQLの`
  • SQLサーバー:[]

例えば:"OV2 BAS"bas."Ref ID" = ids."Ref ID"など

+0

+1は、tablenameとcolumn nameを区切ることが間違っているようです。私は質問に使われた区切り文字に基づいて引用符ではなくバッククイックを推測していますが。 –

1

これは、使用しているデータベースエンジンによって異なります。あなたが使用しているDBMSを指定しないでください[ ]

SELECT * FROM [OV2 BAS] AS bas 
INNER JOIN [OV2 RefID] AS ids ON bas.[Ref ID] = ids.[Ref ID] 
WHERE ids.ENUM_H = 'TDischarge'; 
+0

これは、MS Access 2007(Microsoft.ACE.OLEDB.12.0)で作成されたデータベースにアクセスするためのものです。 –

1

が、私はそう、

SELECT * 
FROM [OV2 BAS] AS bas 
    ^^^^^^^^^ 
をSQLサーバを推測している:SQL Serverの場合
、あなたは括弧でフィールド名を配置する必要があります

...フィールド名は角カッコで囲みます。引用符をそのまま使用すると、フィールド名がプレーンな文字列になります。この文字列は、SQLサーバーによってフィールド名として扱われません。

+0

これは、MS Access 2007(Microsoft.ACE.OLEDB.12.0)で作成されたデータベースにアクセスするためのものです。 –

+0

ブラケットもそこで動作します。あなたのスペースが空いていない場合は、あなたのフィールドの名前を変更することを検討してください。 –

+0

JOIN句のフィールド名も引用符で囲まなければなりません。引用符で囲まれたフィールド名はそれらを文字列に変換し、フィールド名として扱われません。 '... ON bas。[Ref ID] = ids。[Ref ID]' –

0

Microsoft Accessの場合、バックティックの空白を含むフィールド名をラップします。 SELECT 'Eng Units` FROM Table