Вывод данных из связанных таблиц - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д