2010-12-06 3 views
2

У нас есть 4 таблицы:Advanced Выберите

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) 

теперь нужны сложные операторы выбора, чтобы получить таблицы нам нужно:

первой таблице нужна столбцы [поставщика, продукт, цена, поставщик (который предлагает продукт)].

второй стол должен показать, что был куплен между $ date1 и $ date2 [продукт, шт, поставщик, цена, дата]

последняя таблица должна показать, что, возможно, было сохранено в заданное время [продавец (самый дешевый поставщик продукта), товар, шт., цена (для одного продукта), сумма (цена за n продуктов)].

Поскольку это не было бы сложным enaugh, результирующие таблицы должны отображать имена, а не ключ. Мы сидели в этот день дыр, но никто из нас не знает, как выполнить необходимые поиски, поэтому любая помощь будет очень признательна.

+1

Вы даже попытаться разорвать эту проблему вниз? Например, необходимость показывать имена вместо идентификаторов вовсе не усложняет решение, так как все это означает, что вам нужны дополнительные простые JOIN, чтобы вытащить имена. Кроме того, описание по крайней мере первого набора результатов, который вы хотите, является неопределенным. Почему у него есть как «поставщик», так и «поставщик»? Также не следует ли в вашей таблице «Покупать» ссылаться на Поставщика? Кроме того, было бы неплохо использовать двойные цены. – 2010-12-06 15:12:47

ответ

0

Посмотрите в joins для выбора данных из нескольких таблиц:

SELECT * FROM Prices LEFT JOIN (Vendors, Products) 
       ON (Products.product_id=Prices.product_id AND Vendors.vendor_id=Prices.vendor_id)