|
|
|
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
|
|||
|---|---|---|---|
|
#18+
Потребовалось воткнуть еще один джоин в и без того насыщенную списками таблицу (результ то бишь) и воткнул по схеме на атрибуте = атрибут потому что еще условие надо было добавить. Компилятор завопил про двусмысленность одного из атрибутов, я ничего сперва не понял. Выше есть using(), ниже есть по атрибутам с тем же самым атрибутом - одним джоином больше, какая разница. Оказалось есть. Юсинги видимо должны быть в одной стае, а по-атрибутно - в другой, вероятно ниже, а может и пофигу. Ну так вот, тут я подумал а нельзя ли присобачить к using() еще и условие, типа using(common_id) and common_id = some_value... Проверил на практике - нельзя. Пошел искать может какой-то хитрый синтаксис требуется и напоролся на попсовую статью про джойны и юзинг в частности. Автор начинает со сравнения синтаксиса соединения в стиле Фиты (я не знал что оно - Theta-стайл), переходит на АНЗИ-стайл и с него на юзинги. И в конце самая мякотка. Я сперва подумал это конкретно про using(), типа именно юзинг так оптимизируется и полез скрипеть своей консолью. Повторил пассы и увидел абсолютно такую же оптимизацию для обычного по-атрибутного соединения, то есть через on f.id = f1.id Вернулся к статье и дочитал что оно _вообще_ для джоинов именно так. Тогда спрашивается на какой козе баян - столько спорили какой синтаксис правильный и самый-самый оптимизированный, если наколка из той же буквы - Фита? http://code.openark.org/blog/mysql/mysql-joins-on-vs-using-vs-theta-style ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2014, 13:21:05 |
|
||
|
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
|
|||
|---|---|---|---|
|
#18+
Что ты хочешь, уважаемый, я ничего не понял, игры разума? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2014, 17:03:47 |
|
||
|
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
|
|||
|---|---|---|---|
|
#18+
bochkov, это местный аналог Паши. Да еше и ссылка битая... может ИП собирает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2014, 21:45:27 |
|
||
|
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
|
|||
|---|---|---|---|
|
#18+
javajdbcДа еше и ссылка битая...У меня нормально открывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2014, 23:35:47 |
|
||
|
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
|
|||
|---|---|---|---|
|
#18+
miksoft, там была датабасе ексепшн! зып даю! теперь работает. Да, не очень комфортабельное разнообразие имеет место. Кроме того, если взять Код: sql 1. 2. 3. 4. 5. 6. и заменить на Код: sql 1. 2. 3. 4. 5. 6. то тоже самое получится в результате. Наверно даже и внутри тоже самое будет. если там написано что все в ТЕТУ переводится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2014, 00:11:35 |
|
||
|
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
|
|||
|---|---|---|---|
|
#18+
bochkovЧто ты хочешь, уважаемый, я ничего не понял, игры разума? Не поняли - пройдите мимо. Или задайте вопрос по существу. Смысл в том что запрос вида select * from t1 join t2 on t1.id = t2.id превращается в select * from t1, t2 where t1.id = t2.id То есть из анзи в оракл, в т.н. фита-стайл, который усердно обсерали. Технически я еще тогда не мог понять что такое join. Если откинуть теорию что субеде выбирает данные трансцендентально, то значит выбирать она может через for( for( for( for и так далее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2014, 06:14:37 |
|
||
|
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
|
|||
|---|---|---|---|
|
#18+
я просто не знал, что у когото выбор стиля соединения таблиц, вызывает столько эмоций, для меня что АНСИ ,что ТЕТА. можно так и эдак, никто же не спорит как лучше писать 1/10 и 0.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2014, 07:35:40 |
|
||
|
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
|
|||
|---|---|---|---|
|
#18+
bochkov1/10 и 0.1 1/10 или 0.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2014, 07:40:59 |
|
||
|
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
|
|||
|---|---|---|---|
|
#18+
deblogger, я тоже нифига не понял "чего сказать хотели"... В доке прямо указано, что все выкрутасы в части ON явно и прямо СНАЧАЛА преобразуются в блок WHERE обычного соединения ... и токмо потом(!) оптимизатор начинает изголяться на запросом. То есть разницы (технической с т.з. оптимизатора) - никакой нет. Я пользую блок ON исключительно из-за его большей читабельности. Вырисовывать эту самую итоговую "веру" - не всегда так очевидно как хотелось бы. Особенно в левых джойнах. А ежели собирать запрос через какие-нибудь "классные автоматы" (есть самописный вариант фреймоврка, типа Юя) - так на несколько порядков удобнее: достаточно указать схемы зависимостей классов смущностей друг от друга и он сам воткнет все какие надо констрейны. Только указываешь "Дай отсюда такие и отсюда добавь это"... а то что там "пятиэтажный" запрос с корреллированными и вложенными подзапросами, формирующий дерево из промежуточных понятий и нумерующий выдачу - как-то по-барабану. У меня ваще, давно уже есть один метод у каждого класса сущности БД: getBy(array) "найди по списку условий". И чего он там "подключает" интересно только один раз при написании метода этого класса getSQL(array) -- отдай свой кусок запроса согласно условиям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2014, 10:50:44 |
|
||
|
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
|
|||
|---|---|---|---|
|
#18+
debloggerСмысл в том что запрос вида select * from t1 join t2 on t1.id = t2.id превращается в select * from t1, t2 where t1.id = t2.id То есть из анзи в оракл, в т.н. фита-стайл, который усердно обсерали. Это для inner join разницы между этими конструкциями нет, а вот outer join - это уже совсем другое дело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2014, 16:54:37 |
|
||
|
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
|
|||
|---|---|---|---|
|
#18+
мускл научился outer join делать? блин, не знал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 00:34:33 |
|
||
|
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
|
|||
|---|---|---|---|
|
#18+
bochkovмускл научился outer join делать? блин, не зналВы путаете full outer join и left/right outer join. Первый он не умеет до сих, последние два умел практически всегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 00:44:55 |
|
||
|
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
|
|||
|---|---|---|---|
|
#18+
с теорией у меня совсем плохо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 00:55:45 |
|
||
|
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
|
|||
|---|---|---|---|
|
#18+
Arhat109У меня ваще, давно уже есть один метод у каждого класса сущности БД: getBy(array) "найди по списку условий". И чего он там "подключает" интересно только один раз при написании метода этого класса getSQL(array) -- отдай свой кусок запроса согласно условиям. Звездешь. SQL это не ковыряние jquery в dom'е. Нет в SQL "условий" таких, как их программисты понимают. Кстати все эти популярные объяснения взаимодействия отношений с рисунками типа вот inner это значит intersection двух кругов, а вот left join ... и нарисованы круги закрашенные по-разному. Потому что бд не массив. И не дом. Бд это туева хуча кортежей которые состоят из туевой хучи атрибутов. Ваши "условия" формируют лишь более-менее высокую степень вероятности извлечения из этой туевой хучи хуч чего-то такого, что вы ожидали получить. Чем хуча туевее, тем труднее определять неопределенность которой по умолчанию является реляционная бд. В отличии от массива точек о каждой из которых заранее все известно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 06:46:38 |
|
||
|
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
|
|||
|---|---|---|---|
|
#18+
Технически никуда от cartesian product не деться. Код СУБД будет брать все указанные отношения и оцеживать их своими foreach'ами по забитым в стек аргументам в if then. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 06:57:19 |
|
||
|
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
|
|||
|---|---|---|---|
|
#18+
deblogger, Вы только мне это не рассказывайте. Я их писал когда-то... в смысле СУБД (в жизнь не пошло, но это другой вопрос). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 08:31:03 |
|
||
|
Долго спорили о join'е по-Ораклу и по-Анзи, а оно, оказывается...
|
|||
|---|---|---|---|
|
#18+
Arhat109, я в смысле про "неопределенность в БД". В Фон Неймане - нет и не может быть никаких неопределенностей, акромя косяков чьих-то ручек. Любой запрос завсегда можно заменить на требуемое количество for и строго соответствующее условиям количество if внутрях, другое дело что это не всегда будет самый быстрый способ. Написал не ради "звездишь", а дабы подчеркнуть, что как там оптимизатор раскладывает запрос - уже настолько НЕ интересно... и чего Вы задались этим вопросом - мне так и осталось непонятным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 08:40:57 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38554726&tid=1835248]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
20ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 362ms |

| 0 / 0 |
