Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2010, 21:10   #1
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию Запрос из двух таблиц

Не знаю даже как лучше тему обозвать.
Вобщем суть в следующем имеется две таблицы
Таблица 1 Города
1 поле I автоинкримент
2 поле TName

Таблица 2 (из какого города в какой)
1 поле id автоинкримент
2 поле Fromtown числовое
2 поле Totown числовое
Т.е в таблице№2 поля 2 и3 содержат числа равные id Таблицы№1
как сделать запрос чтобы отобразились строковые значения городов.
С одним полем получается. Например
Код:
SELECT TName  FROM Таблица1, Таблица2 WHERE Таблица1.id = FromTown
а вот как отобразить сразу и Fromtown и ToTown. Если сделать так
Код:
SELECT TName, TName AS TName1  FROM Таблица1, Таблица2 WHERE Таблица1.id = FromTown and Таблица1.id = ToTown
то отобразятся только одинаковые города
SERG1980 вне форума Ответить с цитированием
Старый 18.11.2010, 21:55   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

одну и ту же таблицу в поле FROM можно указывать столько раз, сколько надо. Только не забывать давать разные алиасы

примерно так:
Код:
SELECT T1.TName as TNameFrom, 
            T2.TName as TNameTo  
   FROM Таблица1 T1, Таблица1 T2, Таблица2 
 WHERE T1.id = FromTown and T2.id = ToTown
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.11.2010, 22:32   #3
Dimasw
Пользователь
 
Регистрация: 12.09.2010
Сообщений: 69
По умолчанию

Вот вариант:
Код:
select * from table2 left join table1 as  a on a.i=table2.fromtown left join table1 as b on b.i=table2.totown
А это если вернуть только поля FromTown и ToTown:
Код:
select a.tname, b.tname from table2 left join table1 as  a on a.i=table2.fromtown left join table1 as b on b.i=table2.totown
SELECT BEST FROM LIFE

Последний раз редактировалось Dimasw; 18.11.2010 в 22:37.
Dimasw вне форума Ответить с цитированием
Старый 18.11.2010, 22:32   #4
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Serge_Bliznykov Вам большой и жирный плюс, столько литры перечитал а такого нигде не встречал. Спасибо всё работает. Может поделитесь вашей литературой
SERG1980 вне форума Ответить с цитированием
Старый 18.11.2010, 22:40   #5
Dimasw
Пользователь
 
Регистрация: 12.09.2010
Сообщений: 69
По умолчанию

В коде Serge_Bliznykov возможно есть засада:
Проверьте будет ли отображена строка, если ToTown или FromTown= пусто
или имени города(ToTown, FromTown) нет в таблице городов
SELECT BEST FROM LIFE

Последний раз редактировалось Dimasw; 18.11.2010 в 22:44.
Dimasw вне форума Ответить с цитированием
Старый 18.11.2010, 22:45   #6
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Это я привёл только часть примера. Возможность пустых значений исключена и значения заносятся программно вне зависимости от пользователя
SERG1980 вне форума Ответить с цитированием
Старый 18.11.2010, 22:47   #7
Dimasw
Пользователь
 
Регистрация: 12.09.2010
Сообщений: 69
По умолчанию

Цитата:
Сообщение от SERG1980 Посмотреть сообщение
Это я привёл только часть примера. Возможность пустых значений исключена и значения заносятся программно вне зависимости от пользователя
Тогда ладно, а то если поле FromTown пустое, то запись вообще не отобразится
SELECT BEST FROM LIFE
Dimasw вне форума Ответить с цитированием
Старый 18.11.2010, 22:56   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

на здоровье!

Цитата:
Может поделитесь вашей литературой
хм... я считал, что это везде есть..
А Вы Мартина Грубера "Понимание SQL" читали?
рекомендую.
Глава 9.
ОБЪЕДИНЕНИЕ ТАБЛИЦЫ С СОБОЙ
цитирую:
Цитата:
Вы можете изобразить обьединение таблицы с собой, как обьединение двух ко-пий одной и той же таблицы. Таблица на самом деле не копируется, но SQL выполня-ет команду так, как если бы это было сделано.
Другими словами, это обьединение — такое же, как и любое другое обьединение между двумя таблицами, за исключением того, что в данном случае обе таблицы идентичны.
но отсюда уже несложно догадаться, что если таблицу можно объединять саму с собой, то можно и другие таблицы таким же образом объединять неоднократно. Нужно только следить, чтобы не забыть указать связи между всеми указанными таблицами (и их псевдо-копиями)...

Dimasw
Цитата:
только в таблице1 и не прокатит T1.TName и T2.Tname
ещё как прокатит! Вы не обратили внимание, что T1 и T2 - это псевдонимы одной и той же таблицы Таблица1

впрочем, вариант от Dimasw через join тоже очень похож на правильный!

Кстати, SERG1980 рекомендую изучить чем связь через WHERE Таблица1.ПОле=Таблица2.Поле (или, другими словами это связь INNER JOIN) отличается от связи LEFT JOIN и RIGHT JOIN - это может пригодится в реальной жизни...
вот, кстати, и ответ на этот вопрос
Цитата:
Сообщение от Dimasw
Тогда ладно, а то если поле FromTown пустое, то запись вообще не отобразится
ну, вроде и разобрались...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.11.2010, 23:05   #9
Dimasw
Пользователь
 
Регистрация: 12.09.2010
Сообщений: 69
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
на здоровье!
ещё как прокатит! Вы не обратили внимание, что T1 и T2 - это псевдонимы одной и той же таблицы Таблица1
Согласен, действительно внимание не обратил, поэтому из своего предыдущего поста удалил лишнее..
SELECT BEST FROM LIFE
Dimasw вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос на сравнение записей двух таблиц. papos SQL, базы данных 0 25.09.2010 12:31
Запрос из двух таблиц T@tali Microsoft Office Access 0 18.05.2010 21:32
sql запрос на выборку записей из двух связанных таблиц Люсьен БД в Delphi 9 20.04.2009 16:07
SQL запрос из двух таблиц.(сложный) Miha87 БД в Delphi 5 10.11.2008 11:04
Как оптимизировать запрос MySQL с выборкой из двух таблиц. Johnatan SQL, базы данных 6 13.04.2008 03:10