2016-11-17 10 views
0

私の質問を実行すると、私は2の代わりにsellerIdにアタッチされたアイテムを1つ戻します。誰も私が言うことができる方法を知っていますか?商品ID:

再販売者に属する各商品の商品名と再販売者を選択します。 4より高い評価?

現在のクエリ:

SELECT items.name, sellers.name 
FROM items 
inner JOIN sellers 
on items.id=sellers.id 
WHERE rating > 4 
ORDER BY sellerId 

クエリのテーブルのためにINC。データ:

CREATE TABLE sellers (
    id INTEGER NOT NULL PRIMARY KEY, 
    name VARCHAR(30) NOT NULL, 
    rating INTEGER NOT NULL 
); 

CREATE TABLE items (
    id INTEGER NOT NULL PRIMARY KEY, 
    name VARCHAR(30) NOT NULL, 
    sellerId INTEGER REFERENCES sellers(id) 
); 

INSERT INTO sellers(id, name, rating) values(1, 'Roger', 3); 
INSERT INTO sellers(id, name, rating) values(2, 'Penny', 5); 

INSERT INTO items(id, name, sellerId) values(1, 'Notebook', 2); 
INSERT INTO items(id, name, sellerId) values(2, 'Stapler', 1); 
INSERT INTO items(id, name, sellerId) values(3, 'Pencil', 2); 

答えて

1

あなたは間違った参加をしています。ここには修正されたクエリがあります。

SELECT items.name, sellers.name 
FROM items 
inner JOIN sellers 
    on items.sellerId=sellers.id 
WHERE rating > 4 
ORDER BY sellerId 

あなたにid = IDに参加している、あなたはitem.sellerIdがseller.idする参加する場であることを、あなたのテーブル定義にsellerid = ID

お知らせをしたい

CREATE TABLE items (
    id INTEGER NOT NULL PRIMARY KEY, 
    name VARCHAR(30) NOT NULL, 
    sellerId INTEGER REFERENCES sellers(id) 
); 
+0

両方のテーブルにある結合が必要ですか? sellerIdは1に入っていますか? – Marc

+0

いいえ、seller.id(売り手の一意の識別子)をitems.id(アイテムテーブルの一意の識別子)に追加しています。これらの2つのテーブル間のリンクは、items.selleridへのseller.idです。 items.selleridはテーブル定義のseller.idへの外部キーです。 –

+0

私はそれを読んでいたとき外来キーを見たことがありませんでした。ありがとう、あなたはそれを透明にしました! – Marc

1

正しい列に参加する必要があります。

SELECT i.name, s.name 
FROM items i INNER JOIN 
    sellers s 
    ON i.sellerid = s.id 
----------^ 
WHERE rating > 4 
ORDER BY i.sellerId 

また、テーブルの別名とq ualifiedカラム名。これにより、クエリの書き込みと読み込みが容易になります。

関連する問題