2016-04-06 3 views
1

私はこのコードを持っています。現在、3つのテーブルを結合しようとしています。テーブル名は紛らわしいですが、これは私がこれまで持っているものです。Headi sql:sql error 1054

SELECT bx-book-ratings.isbn, bx-books.title, bx-users.location 
     ,bx-book-ratings.book-rating 
FROM `bx-book-ratings` 
INNER JOIN `bx-users` 
    ON `bx-book-ratings`.user-id=`bx-users`.user-id 
INNER JOIN `bx-books` 
    ON `bx-book-ratings`.isbn=`bx-books`.isbn 

Error: unknown column 'bx' in field list.

何かアドバイスやヒントをいただければ幸いです。

+1

非上場テーブル名 'BX-ブックratings'。命名規則の変更やエイリアスの使用を改善する。 – lad2025

+0

テーブルにバックティックがない場合は、すぐに構文エラーが発生します。 – b0uncyfr0

答えて

0

エスケープされていない識別子では、ダッシュ文字は無効です。

クエリのクイックフィックスは、すべての識別子(テーブル名と列名)をバッククォートで囲んでエスケープすることです。例えば

SELECT `bx-book-ratings`.`isbn` 
    , `bx-books`.`title` 
    , `bx-users`.`location` 
    , `bx-book-ratings`.`book-rating` 
    FROM `bx-book-ratings` 
    JOIN `bx-users` 
    ON `bx-book-ratings`.`user-id` = `bx-users`.`user-id` 
    JOIN `bx-books` 
    ON `bx-books`.`isbn` = `bx-book-ratings`.`isbn` 

あなたが任意の識別子でダッシュ文字を使用して回避することを検討してください。 (表と列の名前を変更する)アンダースコア文字は通常、区切り文字として使用されます。また、クエリで短いテーブルエイリアスを割り当て、エイリアスで列参照を修飾することを検討することをお勧めします。例えば

SELECT r.isbn 
    , b.title 
    , u.location 
    , r.book_rating 
    FROM bx_book_ratings r 
    JOIN bx_users u 
    ON u.user_id = r.user_id 
    JOIN bx_books b 
    ON r.isbn = b.isbn 
+0

はい、あなたは正しいです。スペンサー7593。ダッシュは大きなノー・ノーです。ありがとう、私は学習しています。 Iveは、すべての生データをダッシュ​​の代わりにアンダースコアに置き換えました。 – b0uncyfr0

関連する問題