SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 01.10.2009 17:09:05

oleg999
Завсегдатай
Зарегистрирован: 19.08.2009
Сообщений: 48

помогите написать запрос???

имею следующую базу:

CREATE DATABASE timetable;
USE timetable;
CREATE TABLE number
(
numberID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
number VARCHAR(60) NOT NULL
)
ENGINE=INNODB;
CREATE TABLE aircraft
(
aircraftID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(60) NOT NULL
)
ENGINE=INNODB;
CREATE TABLE direction
(
directionID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
direction VARCHAR(100) NOT NULL
)
ENGINE=INNODB;
CREATE TABLE day
(
dayID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
day VARCHAR(60) NOT NULL
)
ENGINE=INNODB;
CREATE TABLE timetable
(
timetableID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
numberID INT NOT NULL,
aircraftID INT NOT NULL,
directionID INT NOT NULL,
departure_time VARCHAR(30) NOT NULL,
arrival_time VARCHAR(30) NOT NULL,
flight_time VARCHAR(30) NOT NULL,
dayID int NOT NULL,
FOREIGN KEY (numberID) REFERENCES number (numberID),
FOREIGN KEY (aircraftID) REFERENCES aircraft (aircraftID),
FOREIGN KEY (directionID) REFERENCES direction (directionID),
FOREIGN KEY (dayID) REFERENCES day (dayID)
)
ENGINE=INNODB;
INSERT INTO number VALUES
('','7J631'),
('','7J632'),
('','4J331'),
('','4J332'),
('','4J4347'),
('','4J4348'),
('','4J159'),
('','4J160'),
('','4J151'),
('','4J152'),
('','4J149'),
('','4J150'),
('','4J4351'),
('','4J4352');
INSERT INTO aircraft VALUES
('','Боинг 737-800');
INSERT INTO direction VALUES
('','Душанбе - Москва(Домодедово)'),
('','Москва(Домодедово) - Душанбе'),
('','Душанбе - Санкт-Петербург(Пулково)'),
('','Санкт-Петербург(Пулково) - Душанбе'),
('','Душанбе - Красноярск(Емельяново)'),
('','Красноярск(Емельяново) - Душанбе'),
('','Душанбе - Франкфурт-на-Майне'),
('','Франкфурт-на-Майне - Душанбе'),
('','Душанбе - Дубай'),
('','Дубай - Душанбе'),
('','Душанбе - Худжанд'),
('','Худжанд - Душанбе'),
('','Худжанд - Красноярск(Емельяново)'),
('','Красноярск(Емельяново) - Худжанд');
INSERT INTO day VALUES
('','Пн'),
('','Вт'),
('','Ср'),
('','Чт'),
('','Пт'),
('','Cб'),
('','Вс'),
('','Пн-Вс'),
('','Cр,Сб');
INSERT INTO timetable VALUES
('','1','1','1','08:10','11:40','04:30','8'),
('','2','1','2','12:45','17:45','04:00','8'),
('','3','1','3','20:20','01:25','04:55','4'),
('','4','1','4','02:00','06:00','04:00','5'),
('','5','1','5','13:00','19:25','03:25','5'),
('','6','1','6','23:30','00:10','03:40','5'),
('','7','1','7','02:10','06:30','06:50','6'),
('','8','1','8','15:20','00:20','06:00','6'),
('','9','1','9','20:00','22:45','03:45','9'),
('','10','1','10','00:45','04:50','03:05','9'),
('','11','1','11','19:45','20:25','00:50','6'),
('','12','1','12','05:05','05:45','00:40','1'),
('','13','1','13','22:25','04:30','02:55','6'),
('','14','1','14','06:35','07:00','03:25','7');


В итоге хочу получить такую таблицу не знаю как написать запрос?

Номер рейса    Тип самолета    Направление    Время вылета    Время прибытия Время в полете     Дни недели
7J631    Боинг 737-800    Душанбе - Москва(Домодедово)    8:10    11:40    4:30                              Пн-Вс
7J632    Боинг 737-801    Москва(Домодедово) - Душанбе    12:45    17:45    4:00                              Пн-Вс
4J331    Боинг 737-802    Душанбе - Санкт-Петербург(Пулково)    20:20    1:25    4:55                   Чт
4J332    Боинг 737-803    Санкт-Петербург(Пулково) - Душанбе    2:00    6:00    4:00                   Пт
4J4347    Боинг 737-804    Душанбе - Красноярск(Емельяново)    13:00    19:25    3:25                   Пт
4J4348    Боинг 737-805    Красноярск(Емельяново) - Душанбе    23:30    0:10    3:40                   Пт
4J159    Боинг 737-806    Душанбе - Франкфурт-на-Майне    2:10    6:30    6:50                              Cб
4J160    Боинг 737-807    Франкфурт-на-Майне - Душанбе    15:20    0:20    6:00                              Cб
4J151    Боинг 737-808    Душанбе - Дубай    20:00    22:45    3:45                                         Cр,Сб
4J152    Боинг 737-809    Душанбе-Дубай    0:45    4:50    3:05                                                     Cр,Сб
4J149    Боинг 737-810    Душанбе - Худжанд    19:45    20:25    0:50                                            Cб
4J150    Боинг 737-811    Худжанд-Душанбе    5:05    5:45    0:40                                            Пн
4J4351    Боинг 737-812    Худжанд - Красноярск(Емельяново)    22:25    4:30    2:55                   Cб
4J4352    Боинг 737-813    Красноярск(Емельяново)-Худжанд    6:35    7:00    3:25                    Вс

Объясните, как получить результирующую таблицу???

Неактивен

 

#2 01.10.2009 17:37:12

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: помогите написать запрос???

SELECT n.number, ... , d.day
FROM timetable t
JOIN number n USING(numberID)
...
JOIN `day` d USING (dayID)

Неактивен

 

#3 01.10.2009 17:38:38

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: помогите написать запрос???

SELECT  n.number, a.name, dir.direction, t.arrival_time, t.flight_time, d.`day`
FROM timetable t JOIN number n JOIN aircraft a JOIN direction dir JOIN `day` d
ON (t.numberID=n.numberID AND t.aircraftID=a.aircraftID AND t.directionID=dir.directionID AND t.dayID=d.dayID);



http://dev.mysql.com/doc/refman/5.0/en/join.html

Неактивен

 

#4 01.10.2009 17:40:17

oleg999
Завсегдатай
Зарегистрирован: 19.08.2009
Сообщений: 48

Re: помогите написать запрос???

я извеняюсь, можно полную конструкцию с подробными объяснениями, я только начинаю разбираться в sql, просто возникла срочная задача, мне необходим полный запрос, с объяснениями, если не трудно???Спасибо

Неактивен

 

#5 01.10.2009 17:52:22

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: помогите написать запрос???

Куда уж полнее. Спрашивайте, что конкретно вам не понятно.

Неактивен

 

#6 01.10.2009 17:55:00

oleg999
Завсегдатай
Зарегистрирован: 19.08.2009
Сообщений: 48

Re: помогите написать запрос???

я запустил запрос выдает ошибку:

ERROR 1146 (42S02): Table 'timetable.DAY' doesn't exist

как это поправить?

Неактивен

 

#7 01.10.2009 17:56:58

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: помогите написать запрос???

`day` в обратных кавычках — это зарезервированное слово.

Неактивен

 

#8 01.10.2009 18:00:55

oleg999
Завсегдатай
Зарегистрирован: 19.08.2009
Сообщений: 48

Re: помогите написать запрос???

в каких обратных у вас вроде все так, как вы описали но ошибка таже самая, я не чего не меняю, просто копирую и вставляю в mysql.как поправить?

Неактивен

 

#9 01.10.2009 18:08:38

oleg999
Завсегдатай
Зарегистрирован: 19.08.2009
Сообщений: 48

Re: помогите написать запрос???

Что делать?

Неактивен

 

#10 01.10.2009 18:14:12

oleg999
Завсегдатай
Зарегистрирован: 19.08.2009
Сообщений: 48

Re: помогите написать запрос???

я попробывал все возможные варианты с кавычками, не один не проходит...

Неактивен

 

#11 01.10.2009 18:17:09

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: помогите написать запрос???

У вас таблицца `day` сущесвтвует? Какой запрос вы выполняете?

Неактивен

 

#12 01.10.2009 18:18:34

oleg999
Завсегдатай
Зарегистрирован: 19.08.2009
Сообщений: 48

Re: помогите написать запрос???

да существует, я выполняю этот запрос:
SELECT  n.number, a.name, dir.direction, t.arrival_time, t.flight_time, d.`DAY`
FROM timetable t JOIN number n JOIN aircraft a JOIN direction dir JOIN `DAY` d
ON (t.numberID=n.numberID AND t.aircraftID=a.aircraftID AND t.directionID=dir.directionID AND t.dayID=d.dayID);

мне нужна такая табличка:
Номер рейса    Тип самолета    Направление    Время вылета    Время прибытия Время в полете     Дни недели
7J631    Боинг 737-800    Душанбе - Москва(Домодедово)    8:10    11:40    4:30                              Пн-Вс
7J632    Боинг 737-801    Москва(Домодедово) - Душанбе    12:45    17:45    4:00                              Пн-Вс
4J331    Боинг 737-802    Душанбе - Санкт-Петербург(Пулково)    20:20    1:25    4:55                   Чт
4J332    Боинг 737-803    Санкт-Петербург(Пулково) - Душанбе    2:00    6:00    4:00                   Пт
4J4347    Боинг 737-804    Душанбе - Красноярск(Емельяново)    13:00    19:25    3:25                   Пт
4J4348    Боинг 737-805    Красноярск(Емельяново) - Душанбе    23:30    0:10    3:40                   Пт
4J159    Боинг 737-806    Душанбе - Франкфурт-на-Майне    2:10    6:30    6:50                              Cб
4J160    Боинг 737-807    Франкфурт-на-Майне - Душанбе    15:20    0:20    6:00                              Cб
4J151    Боинг 737-808    Душанбе - Дубай    20:00    22:45    3:45                                         Cр,Сб
4J152    Боинг 737-809    Душанбе-Дубай    0:45    4:50    3:05                                                     Cр,Сб
4J149    Боинг 737-810    Душанбе - Худжанд    19:45    20:25    0:50                                            Cб
4J150    Боинг 737-811    Худжанд-Душанбе    5:05    5:45    0:40                                            Пн
4J4351    Боинг 737-812    Худжанд - Красноярск(Емельяново)    22:25    4:30    2:55                   Cб
4J4352    Боинг 737-813    Красноярск(Емельяново)-Худжанд    6:35    7:00    3:25                    Вс

Неактивен

 

#13 01.10.2009 18:19:27

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: помогите написать запрос???

Ну примените немного не только руки. У Васи слово day написалось большими буквами,
напишите его маленькими. Да, в двух местах надо поменять.

Неактивен

 

#14 01.10.2009 18:19:49

oleg999
Завсегдатай
Зарегистрирован: 19.08.2009
Сообщений: 48

Re: помогите написать запрос???

а получаю ошибку:
ERROR 1146 (42S02): Table 'timetable.DAY' doesn't exist

Неактивен

 

#15 01.10.2009 18:25:45

oleg999
Завсегдатай
Зарегистрирован: 19.08.2009
Сообщений: 48

Re: помогите написать запрос???

вроде получилось только нет одного поля это departure_time, как с ним?

Неактивен

 

#16 01.10.2009 18:28:15

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: помогите написать запрос???

Это подсветка синтаксиса так действует smile

Файловые системы могут по разному воспринимать регистр, во избежание нужно установить переменную lower_case_table_names равной 1.

А ещё лучше не использовать в качестве названий ключевые слова и не перемешивать в кучу названия баз данных, таблиц и колонок. Переименуйте их, а то ведь самому не удобно пользоваться.

Неактивен

 

#17 01.10.2009 18:29:43

oleg999
Завсегдатай
Зарегистрирован: 19.08.2009
Сообщений: 48

Re: помогите написать запрос???

а как быть с недостоющим полем?

Неактивен

 

#18 01.10.2009 18:30:26

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: помогите написать запрос???

Добавте его в запрос (в части перечисления полей: после select до from).

Неактивен

 

#19 01.10.2009 18:31:21

oleg999
Завсегдатай
Зарегистрирован: 19.08.2009
Сообщений: 48

Re: помогите написать запрос???

SELECT  n.number, a.name, dir.direction, t. departure_time, t.arrival_time, t.flight_time, d.`day`
FROM timetable t JOIN number n JOIN aircraft a JOIN direction dir JOIN `day` d
ON (t.numberID=n.numberID AND t.aircraftID=a.aircraftID AND t.directionID=dir.directionID AND t.dayID=d.dayID);
так???

Неактивен

 

#20 01.10.2009 18:39:25

oleg999
Завсегдатай
Зарегистрирован: 19.08.2009
Сообщений: 48

Re: помогите написать запрос???

спасибо, большое все получилось, но я хочу разобраться, в синтаксисе...
n.number, a.name, dir.direction, t. departure_time, t.arrival_time, t.flight_time, d.`day` эти поля это поля таблицы timetable , так которые будут выводиться...Верно

Неактивен

 

#21 01.10.2009 19:17:14

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: помогите написать запрос???

Идентификаторы колонок и таблиц могут быть записаны с указанием идентификатора элемента более высоко уровня, разделенные точкой. Не знаю как по-русски назвать эту форму записи.

Т.е. `имя_колонки` эквивалентно `имя_таблицы`.`имя_колонки` эквивалентно `имя_базы`.`имя_таблицы`.`имя_колонки`

Таким образом, n.number это колонка number из таблицы n. Где n это алиас таблицы number (см JOIN number n).
Иными словами SELECT  n.number, означает, что берется значение колонки number из таблицы number.

P.S. рекомендую всё-таки использовать различные имена для колонок и таблиц, сами ведь запутаетесь при составлении запроса.

Неактивен

 

Board footer

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