SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.06.2008 05:39:55

das
Участник
Зарегистрирован: 04.06.2008
Сообщений: 2

помогите сделать запрос

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

Есть простая база данных 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);

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

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

Неактивен

 

#2 05.06.2008 09:41:22

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: помогите сделать запрос

SELECT
    t1.id_prodaga, t1.kolvo, -- ... тут можно добавлять любые колонки из таблицы prodaga
    t2.fio_pokupatel, -- покупатель
    t3.fio_prodavec, -- продавец
    t4.name_reg, -- регион покупателя
    t5.name_reg -- регион продавца
FROM prodaga t1
JOIN pokupatel t2 USING (id_pokupatel)
JOIN prodavec t3 USING (id_prodavec)
JOIN reg t4 ON t2.id_reg = t4.id_reg
JOIN reg t5 ON t3.id_reg = t5.id_reg


К запросу можно добавить условие, например, WHERE t1.id_prodaga = здесь_id_продажи или какое-либо еще.

Примечание: JOIN t2 USING (id_pokupatel) - то же, что и JOIN t2 ON t1.id_pokupatel = t2.id_pokupatel.

Правильно сделали, что привели скрипты для создания и заполнения таблиц - сразу удобно было проверить для Вас запрос.

Неактивен

 

#3 05.06.2008 10:42:31

das
Участник
Зарегистрирован: 04.06.2008
Сообщений: 2

Re: помогите сделать запрос

огромное спасибо!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson