![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
oson |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 289 Регистрация: 3.3.2004 Где: Севастополь Репутация: нет Всего: 1 |
Подскажите пожалуйста.
Вот запрос с WHERE
как написать при помощи JOIN. Получается, что address становится дважды алиасом. Похоже, что JOIN намного неудобнее простого WHERE. Чтото не пойму логики, как им пользоваться :( Есть какой-то хороший туториалс? |
|||
|
||||
oson |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 289 Регистрация: 3.3.2004 Где: Севастополь Репутация: нет Всего: 1 |
То есть получается его можно написать вот так
если учитывать что address.id для employee и для enterprise - 2 разных ключа :( И это наверное правильно - то есть еще один альяс сделать. Но иногда ж пишут чтото типа
Но во-первых так не работает, а во-вторых - когда и как надо писать? |
||||
|
|||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Объединения через where это тоже объединения.
С технической точки зрения ваш запрос переписанный на join эквивалентен запросу с объединением в where. Преимущество использования синтаксиса join, в данном случае, с моей точки зрения, в том, что происходит явное отделение критериев объединения множеств от критериев отбора. Что повышает читабельность. если вы внимательно подумаете, то поймете что в первом запросе тоже надо дважды соединяться с адресом. При условии конечно, что мы не желаем отобрать те employee и те enterprise которые имеют общий адрес. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
oson |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 289 Регистрация: 3.3.2004 Где: Севастополь Репутация: нет Всего: 1 |
Дело в том, что это делается тулза, которая должна сделать JOIN выбранных таблиц для любой структуры базы данных. То есть человек выбрал 5 таблиц из базы - и эта тулза должна догадаться, как их связать между собой. Поэтому мне нужен алгоритм построения этих JOIN в целом, то есть чтобы написать код, который будет эти джойны строить.
Есть ктото, кто настолько ясно представляет себе этот механизм, чтобы сформулировать четко правило этих джойнов? Заранее благодарен. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 15 Всего: 260 |
либо объединять по одноименным полям(утопия, когда над БД работают несколько человек, без неких правил семантически одно поле в разных таблицах может называться по-разному), либо парсить foreign key для выявления связей(не каждая БД и не всегда поддерживает foreign key), либо просить человека указать поля для связывания. |
|||
|
||||
Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
При этом можно предлагать предворительно сопоставив столбцу одной таблицы те поля другой таблицы у которых такой тип данных, который бы допускал соединение. (А для тех которых тип "не подходящий" - Enabled=false). Так же можно "приоритетно" предлагать пользователю выбрать вариант связи. Сначала для полей Unique, primary key - мол "скорее всего это должно Вам подойти", а лишь потом всё остальное. -------------------- Слава Україні! |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
oson, неужели вы считаете что данный алгоритм можно реализовать за 1000 шагов или 10000000 шагов?
если бы все было так просто, то такое ПО было бы реализовано лет так 30 назад. |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |