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

Узнай цену своей работы

Формулировка задачи:

Добрый день! Помогите разобраться с одной проблемой. Есть 3 таблицы, связанные между собой:
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 Я пытаюсь получить данные следующим запросом:
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 И еще вопрос. Как вывести значения при следующем запросе:
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

Решение задачи: «Вывод данных из связанных таблиц»

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. В итоге, выборка осуществляется по следующим условиям:

  1. table1.ID = table2.ID_table1
  2. table1.ID = table3.ID_table1
  3. table1.ID = 3 Выполнение этого запроса вернёт все строки из таблицы table1, которые соответствуют указанным условиям, а также соответствующие им строки из таблиц table2 и table3.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5