Задавайте вопросы, мы ответим
Вы не зашли.
имею следующую базу:
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 Вс
Объясните, как получить результирующую таблицу???
Неактивен
SELECT n.number, ... , d.day
FROM timetable t
JOIN number n USING(numberID)
...
JOIN `day` d USING (dayID)
Неактивен
Неактивен
я извеняюсь, можно полную конструкцию с подробными объяснениями, я только начинаю разбираться в sql, просто возникла срочная задача, мне необходим полный запрос, с объяснениями, если не трудно???Спасибо
Неактивен
Куда уж полнее. Спрашивайте, что конкретно вам не понятно.
Неактивен
я запустил запрос выдает ошибку:
ERROR 1146 (42S02): Table 'timetable.DAY' doesn't exist
как это поправить?
Неактивен
`day` в обратных кавычках — это зарезервированное слово.
Неактивен
в каких обратных у вас вроде все так, как вы описали но ошибка таже самая, я не чего не меняю, просто копирую и вставляю в mysql.как поправить?
Неактивен
Что делать?
Неактивен
я попробывал все возможные варианты с кавычками, не один не проходит...
Неактивен
У вас таблицца `day` сущесвтвует? Какой запрос вы выполняете?
Неактивен
да существует, я выполняю этот запрос:
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 Вс
Неактивен
Ну примените немного не только руки. У Васи слово day написалось большими буквами,
напишите его маленькими. Да, в двух местах надо поменять.
Неактивен
а получаю ошибку:
ERROR 1146 (42S02): Table 'timetable.DAY' doesn't exist
Неактивен
вроде получилось только нет одного поля это departure_time, как с ним?
Неактивен
Это подсветка синтаксиса так действует
Файловые системы могут по разному воспринимать регистр, во избежание нужно установить переменную lower_case_table_names равной 1.
А ещё лучше не использовать в качестве названий ключевые слова и не перемешивать в кучу названия баз данных, таблиц и колонок. Переименуйте их, а то ведь самому не удобно пользоваться.
Неактивен
а как быть с недостоющим полем?
Неактивен
Добавте его в запрос (в части перечисления полей: после select до from).
Неактивен
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);
так???
Неактивен
спасибо, большое все получилось, но я хочу разобраться, в синтаксисе...
n.number, a.name, dir.direction, t. departure_time, t.arrival_time, t.flight_time, d.`day` эти поля это поля таблицы timetable , так которые будут выводиться...Верно
Неактивен
Идентификаторы колонок и таблиц могут быть записаны с указанием идентификатора элемента более высоко уровня, разделенные точкой. Не знаю как по-русски назвать эту форму записи.
Т.е. `имя_колонки` эквивалентно `имя_таблицы`.`имя_колонки` эквивалентно `имя_базы`.`имя_таблицы`.`имя_колонки`
Таким образом, n.number это колонка number из таблицы n. Где n это алиас таблицы number (см JOIN number n).
Иными словами SELECT n.number, означает, что берется значение колонки number из таблицы number.
P.S. рекомендую всё-таки использовать различные имена для колонок и таблиц, сами ведь запутаетесь при составлении запроса.
Неактивен