SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 09.04.2011 13:54:43

Osanve
Участник
Зарегистрирован: 09.04.2011
Сообщений: 7

Отношение связанных таблиц

Здравствуйте.
Возникла такая проблема.
При запросе:

mysql> SELECT lr1_1.number, lr1_1.fio, lr1_2.code, lr1_2.name, lr1_4.auditory, lr1_3.code, lr1_3.name
    -> FROM lr1_1 INNER JOIN lessons ON lr1_1.number = lessons.teacher
    -> INNER JOIN lessons ON lr1_2.code = lessons.lesson
    -> INNER JOIN lessons ON lr1_4.auditory = lessons.auditory
    -> INNER JOIN lessons ON lr1_3.code = lessons.cafedry;
 

Выдается ошибка:
ERROR 1066 (42000): Not unique table/alias: 'lessons'


Структура таблиц:
mysql> DESCRIBE lr1_1;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| number  | int(11)     | NO   | PRI | 0       |       |
| fio     | varchar(60) | YES  |     | NULL    |       |
| address | varchar(60) | YES  |     | NULL    |       |
| work    | varchar(60) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> DESCRIBE lr1_2;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| code       | int(11)     | NO   | PRI | 0       |       |
| name       | varchar(60) | YES  |     | NULL    |       |
| hours      | int(11)     | YES  |     | NULL    |       |
| controle   | varchar(60) | YES  |     | NULL    |       |
| categories | varchar(60) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql> DESCRIBE lr1_3;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| code     | int(11)     | NO   | PRI | 0       |       |
| name     | varchar(60) | YES  |     | NULL    |       |
| idZavCaf | int(11)     | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> DESCRIBE lr1_4;
+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| auditory | char(5) | NO   | PRI |         |       |
+----------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> DESCRIBE lessons;
+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| teacher  | int(11) | NO   | PRI | 0       |       |
| lesson   | int(11) | NO   | PRI | 0       |       |
| auditory | char(5) | NO   | PRI |         |       |
| cafedry  | int(11) | NO   | PRI | 0       |       |
+----------+---------+------+-----+---------+-------+
4 rows in set (0.00 sec)
 


Задание лабораторной: Создать связанные таблицы и получить их отношение.

В чем может быть проблема?
Заранее спасибо.

Неактивен

 

#2 09.04.2011 14:08:48

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

Re: Отношение связанных таблиц

У вас в запросе несколько раз используется одна и та же таблица lessons. Как серверу их различать?
Для этого используют алиасы, например lessons as t1, и в дальнейшем запросе к этой таблице обращаются по новому имени.

http://dev.mysql.com/doc/refman/5.5/en/select.html

Неактивен

 

#3 09.04.2011 14:49:31

Osanve
Участник
Зарегистрирован: 09.04.2011
Сообщений: 7

Re: Отношение связанных таблиц

Спасибо. Переписал так:

mysql> SELECT lr1_1.number, lr1_1.fio, lr1_2.code, lr1_2.name, lr1_4.auditory, lr1_3.code, lr1_3.name
    -> FROM lr1_1 INNER JOIN lessons ON lr1_1.number = lessons.teacher
    -> INNER JOIN lr1_2 ON lessons.lesson = lr1_2.code
    -> INNER JOIN lr1_4 ON lessons.auditory = lr1_4.auditory
    -> INNER JOIN lr1_3 ON lessons.cafedry = lr1_3.code;
+--------+----------------+------+-------------+----------+------+---------------+
| number | fio            | code | name        | auditory | code | name          |
+--------+----------------+------+-------------+----------+------+---------------+
|      1 | Vitovtova N.I. |  105 | Angliyskiy  | 7-307    |  305 | PO            |
|      2 | Kalyadin N.I.  |  101 | TViMS       | 7-214    |  306 | ASOiU         |
|      3 | Ivanov S.P.    |  104 | BD          | 1-303    |  309 | Pribori       |
|      3 | Ivanov S.P.    |  108 | TA          | 1-201    |  301 | VT            |
|      3 | Ivanov S.P.    |  109 | IG          | 2-118    |  302 | RiD           |
|      5 | Sidorov P.I.   |  107 | Elektronika | 1-120    |  310 | Yuridicheskiy |
|      5 | Sidorov P.I.   |  110 | TP          | 2-134    |  303 | M             |
|      6 | Sidorov I.P.   |  103 | CG          | 2-122    |  308 | MatMetodi     |
|      9 | Kidalov R.G.   |  102 | Fizika      | 3-102    |  307 | Zashita       |
|      9 | Kidalov R.G.   |  111 | C           | 6-201    |  304 | STiA          |
+--------+----------------+------+-------------+----------+------+---------------+
10 rows in set (0.03 sec)

Вроде работает.

Неактивен

 

#4 09.04.2011 15:57:40

Osanve
Участник
Зарегистрирован: 09.04.2011
Сообщений: 7

Re: Отношение связанных таблиц

Дошел до следующей работы и опять возникла проблема smile
Методичка написана для MS SQL, вследствие чего возник вопрос, как это сделать в MySQL.

3.1.1. Создание схемы базы данных
Для базы данных, созданной в ходе выполнения лабораторной работы №2, составить схему данных.  Для этого с помощью программы Enterprise Manager в базе данных создать новую диаграмму (Diagrams / New Database Diagram) и далее по подсказкам мастера диаграмм добавить таблицы и установить связи между таблицами, например, как на рисунке 1 для примера из 2 лабораторной работы: [скрин] Связи устанавливаются перетаскиванием какого-либо поля одной таблицы в соответствующее поле другой, и указанием свойств созданной связи: [скрин] Для каждой связи установить свойства каскадного изменения и удаления записей.
Сохранить схему. При возникновении ошибок сохранения проверить правильность (целостность) связанных данных (внешних ключей) и повторно создать схему.

Заранее спасибо.

Неактивен

 

#5 09.04.2011 16:53:12

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

Re: Отношение связанных таблиц

http://dev.mysql.com/doc/refman/5.5/en/ … aints.html

Например,
ALTER TABLE tablename ADD FOREIGN KEY (fieldname) REFERENCES othertable (otherfield) ON DELETE CASCADE;

Неактивен

 

#6 09.04.2011 17:05:31

Osanve
Участник
Зарегистрирован: 09.04.2011
Сообщений: 7

Re: Отношение связанных таблиц

Проблема не в том, как сделать связь (благо маны чаще всего рулят), а в том, как представить в отчете диаграмму.

P.S. И аналогичная проблема с другим пунктом этой же л/р:

Построить запрос на выборку данных из связанных таблиц, аналогичный тому, который вы строили во второй лабораторной работе, но используя графический построитель видов (View)

В случае MySQL надо будет использовать phpmyadmin или лучше что-то другое?

Отредактированно Osanve (09.04.2011 17:07:18)

Неактивен

 

#7 11.04.2011 00:15:08

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

Re: Отношение связанных таблиц

ЭЭ... а почему Вы не хотите проходить материал на базе MSSQL? Всё равно картинка
Enterprise Manager будет отличаться от того, что Вы сможете получить в MySQL?

Забудьте слово phpmyadmin и сожгите его на ритуальном костре, если можете. Можете
воспользоваться MySQL Workbench, он вполне внятно строил картинки раньше.

Неактивен

 

#8 11.04.2011 16:33:12

Osanve
Участник
Зарегистрирован: 09.04.2011
Сообщений: 7

Re: Отношение связанных таблиц

paulus написал:

ЭЭ... а почему Вы не хотите проходить материал на базе MSSQL?

Потому что дома поставить его нет ни возможности, ни желания (использую GNU/Linux Debian), а выполнять в аудитории уже опоздал, т.к. все перешли к 5ой, а я в это время выполнял курсовые.

Неактивен

 

#9 12.04.2011 20:57:26

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

Re: Отношение связанных таблиц

Но Вы же понимаете, что Вы всё равно не сдадите задание «покажите картинку
такую же, как в книжке», если картинка отличается?

Неактивен

 

#10 12.04.2011 22:15:12

Osanve
Участник
Зарегистрирован: 09.04.2011
Сообщений: 7

Re: Отношение связанных таблиц

Данный вопрос был оговорен. Мне разрешили делать на MySQL со всеми вытекающими последствиями.

P.S. Скачал deb-пакет MySQL Workbench. При установке возникает ошибка: "Error: Dependency is not satisfiable: libgdk-pixbuf2.0-0 (>= 2.21.6)". libgdk-pixbuf в репах не оказалось. Сорцы скачал, но компилить ещё не пытался.

Неактивен

 

#11 15.04.2011 20:32:11

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

Re: Отношение связанных таблиц

Так поставьте зависимости?

Неактивен

 

#12 19.04.2011 18:27:38

Osanve
Участник
Зарегистрирован: 09.04.2011
Сообщений: 7

Re: Отношение связанных таблиц

Мне гугл предложил пересобрать пакет из исходников. Но пока потребность отпала, т.к. л/р, в которой требовалась диаграмма, уже сдал.

Неактивен

 

Board footer

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