Вывод данных из связанных таблиц - MySQL
Формулировка задачи:
Добрый день!
Помогите разобраться с одной проблемой.
Есть 3 таблицы, связанные между собой:
Во всех таблицах записаны данные.
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
Я пытаюсь получить данные следующим запросом:
В итоге он мне выводит слишком много полей:
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
И еще вопрос. Как вывести значения при следующем запросе:
Т.к. в таблице table2 ID_table1 = 3 не существует, то вся выборка вышла пустой. А как сделать так, чтобы выводило поля, в которых table1.ID = 3, без учета пустых столбцов?
Хочу увидеть следующий результат:
Name_table1| Name_table2|Name_table3
three | |cat
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;
Select Name_table1, Name_table2, Name_table3 FROM table1, table2, table3 WHERE table1.ID = 1
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;
Решение задачи: «Вывод данных из связанных таблиц»
textual
Листинг программы
where table1.ID=table2.ID_table1 and table1.ID=table3.ID_table1 and table1.ID=3
Объяснение кода листинга программы
В представленном фрагменте кода происходит выборка данных из трёх связанных таблиц: table1, table2 и table3. Условие выбора данных задаётся с помощью оператора WHERE. В нём указано, что нужно выбирать только те строки, в которых значение идентификатора (ID) в таблице table1 совпадает со значением идентификатора (ID) в таблице table2 и таблице table3. Кроме того, в конце условия указано, что нужно выбирать только те строки, в которых значение идентификатора (ID) в таблице table1 равно 3. В итоге, выборка осуществляется по следующим условиям:
- table1.ID = table2.ID_table1
- table1.ID = table3.ID_table1
- table1.ID = 3 Выполнение этого запроса вернёт все строки из таблицы table1, которые соответствуют указанным условиям, а также соответствующие им строки из таблиц table2 и table3.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д