2010-12-06 10 views
2

我々は4つのテーブルがあります。高度な選択

mysql> desc Products; 
+------------+-------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+------------+-------------+------+-----+---------+----------------+ 
| product_id | int(11)  | NO | PRI | NULL | auto_increment | 
| product | varchar(30) | NO |  | NULL |    | 
+------------+-------------+------+-----+---------+----------------+ 
2 rows in set (0.00 sec) 

mysql> desc Vendors; 
+-----------+-------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+-----------+-------------+------+-----+---------+----------------+ 
| vendor_id | int(11)  | NO | PRI | NULL | auto_increment | 
| vendor | varchar(30) | YES |  | NULL |    | 
+-----------+-------------+------+-----+---------+----------------+ 
2 rows in set (0.00 sec) 

mysql> desc Prices; 
+------------+---------+------+-----+---------+----------------+ 
| Field  | Type | Null | Key | Default | Extra   | 
+------------+---------+------+-----+---------+----------------+ 
| price_id | int(11) | NO | PRI | NULL | auto_increment | 
| vendor_id | int(11) | NO | MUL | NULL |    | 
| product_id | int(11) | NO | MUL | NULL |    | 
| price  | double | YES |  | NULL |    | 
+------------+---------+------+-----+---------+----------------+ 
4 rows in set (0.00 sec) 

mysql> desc Bought; 
+------------+---------+------+-----+---------+----------------+ 
| Field  | Type | Null | Key | Default | Extra   | 
+------------+---------+------+-----+---------+----------------+ 
| bought_id | int(11) | NO | PRI | NULL | auto_increment | 
| product_id | int(11) | NO | MUL | NULL |    | 
| date  | date | YES |  | NULL |    | 
| pieces  | int(11) | YES |  | 1  |    | 
+------------+---------+------+-----+---------+----------------+ 
4 rows in set (0.00 sec) 

今、我々は我々が必要なテーブルを取得するには、いくつかの複雑なSELECT文を必要とする:

最初の表には、列[ベンダー、製品、価格、ベンダーを必要とします(それは製品を提供する)]。

2番目の表は、[[製品、部品、ベンダー、価格、日付]

最後のテーブルは、与えられた時間内に保存されていたかもしれないものを示さなければならない$日付1と$ date2の間に購入されたかを示す必要がありますベンダー(製品の最も安いベンダー)、製品、価格、(1品目)、合計(n品目の価格)]。

これは複雑ではないので、結果のテーブルはキーの代わりに名前を表示する必要があります。私たちはこの1日の終わりに座っていましたが、私たちの誰もが必要な検索を実行する知識を持っていないので、どんな助けも大歓迎です。複数のテーブルからデータを選択するためのjoins

+1

あなたも、問題を打破しようとしましたか?例えば、IDの代わりに名前を表示する必要があれば、解決策はまったく複雑ではありません。というのも、単純なJOINが必要なだけだからです。また、少なくとも最初の結果セットの説明は曖昧です。なぜそれは "ベンダー"と "ベンダー"の両方を持っていますか?また、あなたのBoughtテーブルが何らかの方法でベンダーを参照してはいけませんか?また、価格の倍数を使うのは良い考えではないかもしれません。 –

+0

最初、2番目と最後の "テーブル"によって、クエリを意味しますか? – RedFilter

+0

@Matti - 「良い考えではないかもしれない」=>「恐ろしい考えです」 – Donnie

答えて

0

ルック:

SELECT * FROM Prices LEFT JOIN (Vendors, Products) 
       ON (Products.product_id=Prices.product_id AND Vendors.vendor_id=Prices.vendor_id) 
関連する問題