SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 05.09.2019 12:41:46

РябининАртем
Участник
Зарегистрирован: 05.09.2019
Сообщений: 4

Вопрос по составлению запроса к 3 таблицам

Добрый день уважаемые формучане.
Я не так давно начал изучать столь увлекательный мир SQL запросов. Но вот один вид запроса у меня все никак не получается и хочу попросить у вас помощи.

Пример задачи:
Есть 3 таблицы со значениями:
T1
T2
T3


 CREATE DATABASE `BD` ;

 CREATE TABLE `BD`.`T1` (`Id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY) ENGINE = InnoDB;
 CREATE TABLE `BD`.`T2` (`Id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY) ENGINE = InnoDB;
 CREATE TABLE `BD`.`T3` (`T1Id` INT NOT NULL ,`T2Id` INT NOT NULL) ENGINE = InnoDB;

 ALTER TABLE `T3` ADD INDEX ( `T1Id` ) ;
 ALTER TABLE `T3` ADD INDEX ( `T2Id` ) ;

 ALTER TABLE `T3` ADD FOREIGN KEY ( `T1Id` ) REFERENCES `BD`.`T1` (`Id`);
 ALTER TABLE `T3` ADD FOREIGN KEY ( `T2Id` ) REFERENCES `BD`.`T2` (`Id`);

 INSERT INTO `BD`.`T1` (`Id`) VALUES ('1'), ('2'), ('3');
 INSERT INTO `BD`.`T2` (`Id`) VALUES ('1'), ('2'), ('3');
 INSERT INTO `BD`.`T3` (`T1Id` ,`T2Id`) VALUES ('1', '1'), ('1', '2'), ('2', '1'), ('2', '2'), ('2', '3'), ('3', '2'), ('1', '3');
 


Содержимое таблиц:
T1         T2       
===       ===
| Id |       | Id |
===       ===
|  1 |       |  1 |
|  2 |       |  2 |
|  3 |       |  3 |
===       ===

Таблица со связями:
T3
===========
| TzId1 | TzId2 |
===========
|   1     |   1     |
|   1     |   2     |
|   2     |   1     |
|   2     |   2     |
|   2     |   3     |
|   3     |   2     |
|   3     |   3     |
===========

Что я хочу получить:

===========
| TzId1 | TzId2 |
===========
|   1     |   3     |
|   3     |   1     |
===========

Отредактированно РябининАртем (05.09.2019 12:45:22)


Прикрепленные файлы:
Attachment Icon ImgExample.png, Размер: 7,293 байт, Скачано: 234

Неактивен

 

#2 05.09.2019 15:08:00

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

Re: Вопрос по составлению запроса к 3 таблицам

select T1.id as TzId1, T2.id as TzId2 from (T1,T2) left join T3 on T1.id=TzId1 and T2.id=TzId2 where TzId1 is null

Неактивен

 

#3 05.09.2019 15:31:51

РябининАртем
Участник
Зарегистрирован: 05.09.2019
Сообщений: 4

Re: Вопрос по составлению запроса к 3 таблицам

Добрый день.

Запрос возвращает ошибку:
#1054 - Unknown column 'TzId1' in 'where clause'

Неактивен

 

#4 05.09.2019 15:39:06

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

Re: Вопрос по составлению запроса к 3 таблицам

используйте названия полей из таблицы T3

Неактивен

 

#5 05.09.2019 16:28:34

РябининАртем
Участник
Зарегистрирован: 05.09.2019
Сообщений: 4

Re: Вопрос по составлению запроса к 3 таблицам

Получилось.
Спасибо большое

select T1.Id as TzId1, T2.Id as TzId2 from (T1,T2) left join T3 on T1.id=T3.T1Id and T2.id=T3.T2Id where T3.T2Id is null

Не знал что можно указать 2 таблицы для left join

Отредактированно РябининАртем (05.09.2019 16:29:22)

Неактивен

 

Board footer

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