単純なselectステートメントが正しいデータを返さない


1

アイテム名(items.name)、ベンダー名(vendors.name)、価格(prices.url)のURL、および価格が必要なデータを返そうとしています。 prices.vidおよびvendors.vidの外部キーvid(ベンダーID)を使用し、アイテムID 3(items.iid = '3')の結果のみを表示する3つの異なるテーブル(アイテム、ベンダーおよび価格)それでも、私は異なる商品IDの結果を得る。ここで

は、テーブルがどのように見えるかです:私は、クエリの実行時に

mysql> describe prices; 
+-------+------------------------+------+-----+---------+----------------+ 
| Field | Type     | Null | Key | Default | Extra   | 
+-------+------------------------+------+-----+---------+----------------+ 
| pid | int(10) unsigned  | NO | PRI | NULL | auto_increment | 
| price | decimal(10,2) unsigned | YES |  | NULL |    | 
| url | longtext    | YES |  | NULL |    | 
| iid | int(10) unsigned  | NO | MUL | NULL |    | 
| vid | tinyint(3) unsigned | NO | MUL | NULL |    | 
+-------+------------------------+------+-----+---------+----------------+ 
5 rows in set (0.00 sec) 


mysql> select * from items; 
| iid | name      | scid | desc                                                        
| 1 | Ahtanum     | 3 | Ahtanum is ... 
| 2 | Amarillo     | 3 | Amarillo is ...                    
| 3 | 22 oz Beer Bottles Amber | 56 | 22 ounce amber... 


mysql> select * from prices; 
+-----+-------+--------------------------------------------------------------------------------------+-----+-----+ 
| pid | price | url                      | iid | vid | 
+-----+-------+--------------------------------------------------------------------------------------+-----+-----+ 
| 1 | 3.50 | homebrewhaven.com/id=10                  | 2 | 4 | 
| 2 | 4.50 | morebeer.com/id=15                  | 2 | 7 | 
| 3 | 11.99 | http://www.northernbrewer.com/default/beer-bottles-22-oz.html       | 3 | 1 | 
| 4 | 14.99 | http://www.austinhomebrew.com/product_info.php?products_id=993      | 3 | 2 | 
| 5 | 12.50 | http://www.midwestsupplies.com/22-oz-bottles-amber-case-of-12.html     | 3 | 3 | 
| 6 | 14.50 | http://store.homebrewheaven.com/22-oz-brown-beer-bottles-case-of-12-bottles-p69.aspx | 3 | 4 | 
| 7 | 12.95 | http://morebeer.com/view_product/15630//Bottles_-_22_oz_12        | 3 | 7 | 
| 8 | 14.99 | http://www.brewmasterswarehouse.com/product/0101545/case-22-oz-beer-bottle-amber  | 3 | 9 | 
+-----+-------+--------------------------------------------------------------------------------------+-----+-----+ 

は今:

SELECT distinct items.name, vendors.name, prices.url, prices.price 
FROM vendors, prices, items 
WHERE vendors.vid = prices.vid AND items.iid='3' 
ORDER BY prices.price; 

を私はまた、価格のidの1 & 2を取得し、私の結果にも、IIDかかわらず、(アイテムID)は2であり、クエリでは3ではありません。出力:

mysql> select distinct items.name, vendors.name, prices.url, prices.price FROM vendors, prices, items WHERE vendors.vid = prices.vid AND items.iid='3' ORDER BY prices.price; 
+--------------------------+-----------------------+--------------------------------------------------------------------------------------+-------+ 
| name      | name     | url                      | price | 
+--------------------------+-----------------------+--------------------------------------------------------------------------------------+-------+ 
| 22 oz Beer Bottles Amber | Homebrew Heaven  | homebrewhaven.com/id=10                 | 3.50 | 
| 22 oz Beer Bottles Amber | More Beer    | morebeer.com/id=15                  | 4.50 | 
| 22 oz Beer Bottles Amber | Nothern Brewer  | http://www.northernbrewer.com/default/beer-bottles-22-oz.html       | 11.99 | 
| 22 oz Beer Bottles Amber | Midwest Supplies  | http://www.midwestsupplies.com/22-oz-bottles-amber-case-of-12.html      | 12.50 | 
| 22 oz Beer Bottles Amber | More Beer    | http://morebeer.com/view_product/15630//Bottles_-_22_oz_12        | 12.95 | 
| 22 oz Beer Bottles Amber | Homebrew Heaven  | http://store.homebrewheaven.com/22-oz-brown-beer-bottles-case-of-12-bottles-p69.aspx | 14.50 | 
| 22 oz Beer Bottles Amber | Austin Homebrew  | http://www.austinhomebrew.com/product_info.php?products_id=993       | 14.99 | 
| 22 oz Beer Bottles Amber | Brewmasters Warehouse | http://www.brewmasterswarehouse.com/product/0101545/case-22-oz-beer-bottle-amber   | 14.99 | 
+--------------------------+-----------------------+--------------------------------------------------------------------------------------+-------+ 
8 rows in set (0.04 sec) 

私は最初の2つの結果を得ています.3つではなく、2つの結果を得ています。残りの部分はすべて表示されますが、最初の2つは表示されません。

何が起こっているかについてのアイデアはありますか?

+1

アイテムテーブルが他のアイテムと正しく結合されていません。 ANSI構文を使用してクエリを書き直すと、問題が明確になります。 14 9月. 112011-09-14 16:45:08

+1

例えば: ベンダーからDISTINCT i.name 、v.name 、p.url 、p.price を選択V INNERは価格のJOINのp ON v.vid = p.vid INNERは、アイテムのJOIN i ON p.iid = i.iid WHERE i.iid = '3' ORDER BY p.price; 14 9月. 112011-09-14 16:49:52

  0

それは動作します!ありがとう! 14 9月. 112011-09-14 17:04:02

+2

これは本当に[so]で尋ねられているはずです 14 9月. 112011-09-14 18:41:26

5

価格と商品の間にJOINがありません。

where句の暗黙的な結合は、ベンダーと価格を結合するだけなので、その結合とitemsテーブルの結果のデカルト結合を取得します。あなたがいなかったため、参加条件が正しいかどうかはわからない

select distinct items.name, 
     vendors.name, 
     prices.url, 
     prices.price 
FROM vendors 
    JOIN prices ON vendors.vid = prices.vid 
    JOIN items ON items.iid = prices.iid --- this part is missing 
WHERE items.iid='3' 
ORDER BY prices.price; 

:あなたはANSI代わりに使用するキーワードを登録しようしていた場合 は、すぐに

あなたはこのようなものが必要であることに気づいているだろう価格のどの列に項目への外部キーが含まれているかを教えてください。

  0

それは動作します!ありがとう! 14 9月. 112011-09-14 17:04:11

  0

@jgilmour動作している場合は、その横のチェックマークをクリックして回答を受け入れることができます。これは将来の訪問者に、それが正しい解決策であることを示します。 29 5月. 122012-05-29 10:33:25