Принцип JOIN

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
farrier
Сообщения: 2
Зарегистрирован: 29 мар 2009, 21:20

29 мар 2009, 21:26

Стоит задача, чтоб сделать автоматический join ЛЮБОЙ схемы в базе данных.
То есть моя программа подсоединяется к базе, читает как связаны друг с другом таблицы и показывает клиенту. Тот выбирает нужные таблицы и нажимает Сделать запрос.
И вот моя прога должна соединить эти таблицы в JOINах. Но получается, что может быть
несколько таблиц связаны между собой - то есть например address имеет foreign key для role и для customer. И получается, что address должен 2 раза появиться перед словом JOIN - а это ж недопустимо :(
Можно объяснить как-от принцип формирования этих JOIN - а то я чтото не совсем понимаю логику их формирования в случае, когда на какую-то таблицу есть ссылки например сразу в трех других?
Аватара пользователя
AiK
Сообщения: 2271
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

30 мар 2009, 00:42

не очень понял.
Чем не устраивает что-то вроде
[syntax=sql]
select
*
from
table1 t1,
table2 t2,
table3 t3,
table3 t4
where
t1.some_id = t2.some_id
and t1.some_id = t3.some_id
and t1.some_id = t4.some_id
[/syntax]

к слову, джойны могут выполнятся и по парам, отличным от PK<->FK.
Даже самый дурацкий замысел можно воплотить мастерски
farrier
Сообщения: 2
Зарегистрирован: 29 мар 2009, 21:20

30 мар 2009, 01:30

Требование такое, чтоб через join было :(
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

30 мар 2009, 03:35

Ну а какие проблемы? Если 3 таблицы связаны, то объединяйте Join-ом все 3.

Пример неудачный с Address Role и Customer.. Ничего не понятно.

from t1 join (t2 join t3 on (t2.pk=t3.fk)) on (t1.pk=t2.fk)

Но мене кажется что Вы пытаетесь перевыполнить Ваше задание. :) Наверное надо как в Access. Просматривается 1 таблица (главная), и к ней дается на выбор несколько связанных с ней (подчиненных (со вторичными ключами)), чтобы показать связанные дочерние записи. Выбирается единовременно только одна.
Laba
Сообщения: 33
Зарегистрирован: 24 мар 2009, 17:47

03 апр 2009, 10:56

farrier писал(а):Стоит задача, чтоб сделать автоматический join ЛЮБОЙ схемы в базе данных.
...
farrier!

:D Судя по твоему вопросу, могу сказать, что писать программные модули для генератора отчетов тебе ещё рановато. Ты конечно можешь это пытаться сделать, но... ;)

Дам тебе ещё совет: расспроси пользователя (если это не ты сам :D ) о том, что ему конкретно надо. Пусть он самостоятельно или вместе с тобой нарисует формочку в excel
Ответить