Задавайте вопросы, мы ответим
Вы не зашли.
Мне необходимо выбрать данные из нескольких таблиц базы:
Делаю так:
select dirname.direction, typename.type, price.main, unitname.unit from direction, type,main,unit;
выдает ошибку:
ERROR 1054 (42S22): Unknown column 'dirname.direction' in 'field list'
Подскажите как сделать такой запрос
Спасибо...
Вот моя база:
CREATE TABLE unit
(
unitid int AUTO_INCREMENT NOT NULL,
unitname varchar(25) NOT NULL,
PRIMARY KEY(unitid)
) ENGINE=InnoDB;
CREATE TABLE type
(
typeid int AUTO_INCREMENT NOT NULL,
typename varchar(25) NOT NULL,
PRIMARY KEY(typeid)
) ENGINE=InnoDB;
CREATE TABLE direction
(
dirid int AUTO_INCREMENT NOT NULL,
dirname varchar(70) NOT NULL,
PRIMARY KEY(dirid)
) ENGINE=InnoDB;
CREATE TABLE main (
mainid int AUTO_INCREMENT NOT NULL,
dirid int NOT NULL,
typeid int NOT NULL,
price int NOT NULL,
unitid int NOT NULL,
PRIMARY KEY(mainid),
FOREIGN KEY (dirid) REFERENCES direction(dirid)
ON UPDATE CASCADE
ON DELETE RESTRICT,
FOREIGN KEY (typeid) REFERENCES type(typeid)
ON UPDATE CASCADE
ON DELETE RESTRICT,
FOREIGN KEY (unitid) REFERENCES unit(unitid)
ON UPDATE CASCADE
ON DELETE RESTRICT
) ENGINE=InnoDB;
insert into unit value ('1','euro');
insert into unit value ('2','us dollar');
insert into direction value ('1','Душанбе-Москва');
insert into direction value ('2','Москва-Душанбе');
insert into direction value ('3','Душанбе-Москва-Душанбе');
insert into direction value ('4','Душанбе-Красноярск');
insert into direction value ('5','Красноярск-Душанбе');
insert into direction value ('6','Душанбе-Красноярск-Душанбе');
insert into direction value ('7','Худжанд-Красноярск');
insert into direction value ('8','Красноярск-Худжанд');
insert into direction value ('9','Худжанд-Красноярск-Худжанд');
insert into direction value ('10','Душанбе-Санкт-Петербург');
insert into direction value ('11','Санкт-Петербург-Душанбе');
insert into direction value ('12','Душанбе-Санк-Петербург-Душанбе');
insert into direction value ('13','Худжанд-Сочи');
insert into direction value ('14','Сочи-Худжанд');
insert into direction value ('15','Худжанд-Сочи-Худжанд');
insert into direction value ('16','Душанбе-Франкфурт-на-Майне');
insert into direction value ('17','Франкфурт-на-Майне-Душанбе');
insert into direction value ('18','Душанбе-Франкфурт-на-Майне-Душанбе');
insert into direction value ('19','Душанбе-Дубай');
insert into direction value ('20','Дубай-Душанбе');
insert into direction value ('21','Душанбе-Дубай-Душанбе');
insert into direction value ('22','Душанбе-Худжанд');
insert into direction value ('23','Худжанд-Душанбе');
insert into direction value ('24','Душанбе-Худжанд-Душанбе');
insert into type value ('1','бизнес-класс');
insert into type value ('2','бизнес повышенный');
insert into type value ('3','бизнес пониженный');
insert into type value ('4','эконом-класс');
insert into type value ('5','эконом повышенный');
insert into type value ('6','эконом пониженный');
insert into type value ('7','семейный');
insert into type value ('8','туристический');
insert into type value ('9','молодежный от 12 до 25 лет');
insert into main value ('1','1','1','351','1');
Неактивен
сначала пишется имя таблицы, а потом имя колонки, т.е. direction.dirname
Неактивен
В таком виде заработало,
"select direction.dirname, type.typename, main.price, unit.unitname from direction, type,main,unit;"
но запрос обрабатывается не правильно, т.е
выводятся это:
....
| Санкт-Петербург-Душанбе | туристический | 351 | euro |
| Санкт-Петербург-Душанбе | туристический | 351 | us dollar |
| Санкт-Петербург-Душанбе | молодежный от 12 до 25 ле | 351 | euro |
|....
а по идеи должна выводиться строчка:
mainid Dirname Type price unit
1 Душанбе-Москва бизнес класс 351 euro
данные основной таблицы insert into main value ('1','1','1','351','1');
Подскажите почему выбрались все эти данные?Как нужно написать запрос чтобы было корректно...
Спасибо....
Неактивен
FROM table1, table2 -это прямое произведение таблиц, при котором для каждой строчки первой таблицы выбираются все из второй таблицы.
В вашем запросе необходимо добавить ограничения на выбор при объединениии таблиц.
http://dev.mysql.com/doc/refman/5.0/en/join.html
Неактивен
А вы можете помочь мне написать данный запрос...очень нужно спасибо...
Неактивен
Насколько я понимаю, данные у вас хранятся в таблице main, а остальные таблицы это справочники. В этом случае вам нужно выбирать данные из таблицы main и для каждой строки ищите соответствие в справочниках.
Неактивен
Я сейчас попробую написать, только можно выслать синтакис на русском языке...
Неактивен
А что такое m и d???
Неактивен
А можете сделать этот запрос хотя бы по двум полям, т.е direction и type, что совсем запутался...
Неактивен
m и d это алиасы для таблиц main и direction, чтобы не писать каждый раз полностью название таблицы.
Не понял, какой синтаксис на русском?
Итоговый запрос выше. В нем для иллюстрации использованы различные формы записи
ON m.dirid=d.dirid синоним USING(dirid)
Неактивен
Пробую так выдает ошибку:
SELECT direction.dirid FROM main m LEFT JOIN direction d ON m.dirid=d.dirname;
Неактивен
т.е так SELECT direction.dirid FROM main m LEFT JOIN direction d ON m.dirid=d.dirname;SELECT direction.dirid FROM main m LEFT JOIN direction d ON m.dirid=d.dirid;
тоже ошибка
Неактивен
Все спасибо, вам огромное за помощь...
Неактивен
oleg999 написал:
Пробую так выдает ошибку:
SELECT direction.dirid FROM main m LEFT JOIN direction d ON m.dirid=d.dirname;
Запись direction d сообщает серверу, что вы выбираете данные из таблицы direction, которая отныне назавается d.
При этом вы пишите в начале запроса SELECT direction.dirid
Естественно сервер сообщит вам, что не знает такой таблицы - direction, ведь вы определили её как d.
ON m.dirid=d.dirname
Какой результат вы ожидаете от сравнения поля dirid из таблицы main с полем dirname из таблицы direction?
Неактивен