2017-01-07 9 views
0

私は2番目のテーブルを3番目の多対多関係で結合しました。私はselectをしようとしていますが、SQLite(バージョン3.11.0)は、自分のうちの1つが存在しないことを伝え続けています。これは真実ではありません!私は何が間違っているのか分かりません。ここでSQliteエラー:そのようなテーブルがありません:結合を使用している間

は私のテーブルです:

DROP TABLE IF EXISTS traits; 
CREATE TABLE traits(
    trait_id INTEGER UNIQUE NOT NULL CHECK(TYPEOF(trait_id) = 'integer'), 
    name  VARCHAR UNIQUE NOT NULL CHECK(TYPEOF(name) = 'text'), 
    uri   VARCHAR UNIQUE NOT NULL CHECK(TYPEOF(uri) = 'text'), 
    PRIMARY KEY (trait_id) 
); 

DROP TABLE IF EXISTS trait_categories; 
CREATE TABLE trait_categories(
    trait_category_id INTEGER UNIQUE NOT NULL CHECK(TYPEOF(trait_category_id) = 'integer'), 
    efo_id   VARCHAR UNIQUE NOT NULL CHECK(TYPEOF(efo_id) = 'text'), 
    name    VARCHAR UNIQUE NOT NULL CHECK(TYPEOF(name) = 'text'), 
    uri    VARCHAR UNIQUE NOT NULL CHECK(TYPEOF(uri) = 'text'), 
    PRIMARY KEY (trait_category_id) 
); 

DROP TABLE IF EXISTS trait_categories_traits; 
CREATE TABLE trait_categories_traits(
    trait_category_id INTEGER NOT NULL CHECK(TYPEOF(trait_category_id) = 'integer'), 
    trait_id   INTEGER NOT NULL CHECK(TYPEOF(trait_id) = 'integer'), 
    FOREIGN KEY (trait_category_id) REFERENCES trait_categories(trait_category_id), 
    FOREIGN KEY (trait_id) REFERENCES traits(trait_id) 
); 

ここに私のSELECTれ失敗している:

SELECT trait_categories.name, traits.name 
FROM trait_categories JOIN trait_categories_traits ON trait_categories_traits.trait_category_id = trait_categories.trait_category_id 
         JOIN traits.trait_id   ON trait_categories_traits.trait_id = traits.trait_id; 

SQLiteは言う:

sqlite> select trait_id from traits limit 1; 
663 
sqlite>  SELECT trait_categories.name, traits.name 
    ...>  FROM trait_categories JOIN trait_categories_traits ON trait_categories_traits.trait_category_id = trait_categories.trait_category_id 
    ...>       JOIN traits.trait_id   ON trait_categories_traits.trait_id = traits.trait_id; 
Error: no such table: traits.trait_id 

助けてください。

答えて

0

JOINは2つのテーブルを結合するので、2つのテーブル名が必要です。 ただし、traits.trait_idはテーブル名ではありません。

traitsテーブルに参加すると思われるので、.trait_idを削除します。 (両方の列が同じ名前の場合、USINGを使用する方が簡単です)。

SELECT ... 
FROM trait_categories 
JOIN trait_categories_traits USING (trait_category_id) 
JOIN traits     USING (trait_id); 
関連する問題