Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как составить пятитабличный запрос?
 
 автор: das   (04.06.2008 в 19:27)   письмо автору
14.7 Кб
 
 

Здравствуйте,
пожалуйста, подскажите!

Есть простая база данных MySQL состоящая из 5 таблиц(См.рис.):
продавцы,
покупатели ,
регионы ,
категории товаров ,
продажи.

Каждый продавец принадлежит к какому-то региону.
Каждый покупатель тоже принадлежит какому-то региону.

Необходимо с помощью одного sql запроса вывести таблицу:
продажа|покупатель|регион покупателя|продавец|регион продавца|

---------------------------------------------------
Скрипт для генерации:
---------------------------------------------------

CREATE TABLE categ (
id_categ VARCHAR(20) NOT NULL,
name VARCHAR(255) NULL,
cena INTEGER UNSIGNED NULL,
PRIMARY KEY(id_categ)
);

CREATE TABLE pokupatel (
id_pokupatel INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
id_reg INTEGER UNSIGNED NOT NULL,
fio_pokupatel VARCHAR(255) NULL,
PRIMARY KEY(id_pokupatel)
);

CREATE TABLE prodaga (
id_prodaga INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
id_categ VARCHAR(20) NOT NULL,
id_pokupatel INTEGER UNSIGNED NOT NULL,
id_prodavec INTEGER UNSIGNED NOT NULL,
date DATE NULL,
kolvo INTEGER UNSIGNED NULL,
PRIMARY KEY(id_prodaga)
);

CREATE TABLE prodavec (
id_prodavec INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
id_reg INTEGER UNSIGNED NOT NULL,
fio_prodavec VARCHAR(255) NULL,
PRIMARY KEY(id_prodavec)
);

CREATE TABLE reg (
id_reg INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
name_reg VARCHAR(45) NULL,
PRIMARY KEY(id_reg)
);

--------------------------------------------------------
Скрипты для заполнения:
--------------------------------------------------------

INSERT INTO reg(name_reg) VALUES ('sever'),
('yug'),
('zapad'),
('vostok');

INSERT INTO prodavec(id_reg, fio_prodavec) VALUES (1,'Ivanov'),
(2,'Petrov'),
(3,'Sidorov');

INSERT INTO pokupatel(id_reg, fio_pokupatel) VALUES (4,'Pechkin'),
(3,'Matroskin'),
(3,'Pupkin'),
(4,'Nikulin'),
(2,'Sharik');

INSERT INTO categ (id_categ, name, cena) VALUES ('1A','slon', '10000'),
('2A','nosorog', '5000'),
('3A','zubr', '9000'),
('4A','tarakan', '1000');

INSERT INTO prodaga(id_prodavec, id_pokupatel, id_categ, date, kolvo)
VALUES (1, 3, '2A', '1999-01-06', 1),
(1, 2, '2A', '1998-11-01', 5),
(2, 2, '2A', '1997-12-06', 3),
(2, 1, '2A', '1999-02-03', 15),
(2, 1, '2A', '2001-01-02', 65),
(1, 4, '1A', '2004-03-08', 2);

----------------------------------------------------------------------

Заранее благодарен.

   
 
 автор: olejek   (05.06.2008 в 10:54)   письмо автору
 
   для: das   (04.06.2008 в 19:27)
 

Используйте псевдонимы таблиц:

SELECT id_prodaga, fio_pokupatel, a.name_reg, fio_prodavec, b.name_reg
FROM reg AS a, reg AS b, pokupatel, prodavec, prodaga
WHERE prodaga.id_pokupatel = pokupatel.id_pokupatel && prodaga.id_prodavec = prodavec.id_prodavec 
&& pokupatel.id_reg = a.id_reg && prodavec.id_reg = b.id_reg

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования