Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/47: Рейтинг темы: голосов - 47, средняя оценка - 4.68
2 / 2 / 1
Регистрация: 27.01.2014
Сообщений: 172
1

Вывод данных из связанных таблиц

29.09.2016, 09:39. Показов 9209. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, Уважаемые Форумчане!
Помогите разобраться с одной проблемой.
Есть 3 таблицы, связанные между собой:
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE TABLE table1(
ID INT(11) NOT NULL AUTO_INCREMENT,
Name_table1 varchar(60),
PRIMARY KEY (ID)) ENGINE = InnoDB;
 
CREATE TABLE table2(
ID INT(11) NOT NULL AUTO_INCREMENT,
Name_table2 varchar(60),
ID_table1 INT(11) NOT NULL,
PRIMARY KEY (ID),
FOREIGN KEY (ID_table1) REFERENCES table1(ID)
ON UPDATE CASCADE
ON DELETE CASCADE) ENGINE = InnoDB;
 
 
CREATE TABLE table3(
ID INT(11) NOT NULL AUTO_INCREMENT,
Name_table3 varchar(60),
ID_table1 INT(11) NOT NULL,
PRIMARY KEY (ID),
FOREIGN KEY (ID_table1) REFERENCES table1(ID)
ON UPDATE CASCADE
ON DELETE CASCADE) ENGINE = InnoDB;
Во всех таблицах записаны данные.
Table1
ID|Name_table1
1 |one
2 |two
3 |three

Table2
ID|Name_table2|ID_table1
1 |new |1
2 |old |1
3 |modern |2


Table3
ID|Name_table3|ID_table2
1 |people |2
2 |dogs |2
3 |cat |3


Я пытаюсь получить данные следующим запросом:


MySQL
1
2
3
Select Name_table1, Name_table2, Name_table3 
FROM table1, table2, table3
WHERE table1.ID = 1
В итоге он мне выводит слишком много полей:

Name_table1| Name_table2|Name_table3
one |new |people
one |old |people
one |modern |people
one |new |dogs
one |old |dogs
one |modern |dogs
one |new |cat
one |old |cat
one |modern |cat


А хотелось бы увидеть следующий результат:
Name_table1| Name_table2|Name_table3
one |new |people
one |old |people


И еще вопрос. Как вывести значения при следующем запросе:
MySQL
1
2
3
Select Name_table1, Name_table2, Name_table3 
FROM table1, table2, table3
WHERE table1.ID=table2.ID_table1 and table1.ID = table3.ID_table1 and table1.ID = 3;
Т.к. в таблице table2 ID_table1 = 3 не существует, то вся выборка вышла пустой. А как сделать так, чтобы выводило поля, в которых table1.ID = 3, без учета пустых столбцов?
Хочу увидеть следующий результат:
Name_table1| Name_table2|Name_table3
three | |cat
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.09.2016, 09:39
Ответы с готовыми решениями:

Запрос на вывод из связанных таблиц
Допустим у нас имеется такая ситуация: Есть две таблицы: Shop id name Product id price

Вывод связанных между собой строк из двух таблиц
Есть БД "dbname" в ней 2 таблицы table1 и table2. Примерное содержание таблиц: table1 id val val...

Выборка связанных данных из двух таблиц
На текущий момент запрос такого вида SELECT id, product1, ( SELECT price2 FROM post_2 ...

Вывод данных из 3 таблиц
Добрый день, я совсем нуб в sql, заранее извиняюсь если мой вопрос слишком глуп ) Есть 3...

2
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
29.09.2016, 11:37 2
Цитата Сообщение от Batosay Посмотреть сообщение
В итоге он мне выводит слишком много полей:
1. Если в запросе несколько таблиц, то. д.б. минимум одно условие связи на каждую пару таблиц, иначе получаем декартово произведение строк таблиц.

2. почитай про LEFT JOIN
0
2 / 2 / 1
Регистрация: 27.01.2014
Сообщений: 172
29.09.2016, 13:36  [ТС] 3
Благодарю за ответ!
А как-нибудь можно совместить 1 и 2 пункты?
Как можно вывести и null строки и без декартова произведения
Выполняю следующий запрос:
MySQL
1
2
3
4
5
SELECT Name_table1, Name_table2, Name_table3
FROM table1
LEFT JOIN table2 ON table1.ID=table2.ID_table1
LEFT JOIN table3 ON table1.ID=table3.ID_table1
where table1.ID=3;
Но в данном запросе декартово произведение остается.
А если прописать к условию что-то типа:
MySQL
1
 where table1.ID=table2.ID_table1 and table1.ID=table3.ID_table1 and table1.ID=3
То выходит пустая таблица.
0
29.09.2016, 13:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.09.2016, 13:36
Помогаю со студенческими работами здесь

Удаление связанных таблиц
Есть таблицы: "products" в ней поля (id_product, price, weight, id_list_product(FOREIGN KEY));...

Правила заполненя связанных таблиц
Добрый день! Задался вопрос как же заполняются связанные таблицы в базах данных. Поисках в...

TRUNCATE TABLE связанных таблиц
Здравствуйте. Использую на сайте базу данных MySQL. Сайт большой и использует множество таблиц с...

Запрос на выбору из многих связанных таблиц
Есть такая база как на картинке. Не могу написать запрос для нахождения фамилии сортировщика в ТПЦ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru