|
|
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
Чего-то я не пойму совсем, вот решил перейти с 5.5 на 8 ранее такой запрос: select * from a,b,c where a.a*=b.a and b.b*=c.b отрабатывал на ура (он точно не нарушает ограничения накладываемые на Transact диалект :-) ) а в 8 материться по типу: invalid expression in WHERE clause of Transact-SQL outer join что за бред? мне что теперь все запросы переделывать на left join right join, чего то не очень это радостно для меня :-( или я чего-то элементарного не догоняю! просьба помочь! заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 10:07 |
|
||
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
Может быть конечно проблема в билде, но тогда я в ауте в полном от Sybase! а какой у восьмерке последний билд и версия, которая реально работоспособна??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 10:26 |
|
||
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
Теперь судя по всему не поддерживается. Почитайте этот документ, там все расписано (о Вашем случае на стр. 18 - "Chained (nested)outer joins"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 10:37 |
|
||
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
LEFT OUTER JOIN не поможет, тут проблема не в синтаксисе, а в функционале. Они действительно перестали поддерживать 2 левых объединения вида есть T1*=T2 и T2*=T1. Мы такие запросы на временные таблицы переделывали. Се ля ви. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 10:50 |
|
||
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
michael_LEFT OUTER JOIN не поможет, тут проблема не в синтаксисе, а в функционале. Они действительно перестали поддерживать 2 левых объединения вида есть T1*=T2 и T2*=T1. Мы такие запросы на временные таблицы переделывали. Се ля ви. Эквивалент "неподдерживаемого" запроса на джойнах: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 10:57 |
|
||
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
Все понятно, очень жаль, я в АУТЕ!!! отсанусь ка я лудше на 5! 5 РУЛЕЗ!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 10:57 |
|
||
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
ЯВсе понятно, очень жаль, я в АУТЕ!!! отсанусь ка я лудше на 5! 5 РУЛЕЗ!!! Смотря для чего. Для небольших БД с малым кол-вом подключений и не сильно навороченной в БД бизнес-логикой действительно рулез. А если чего то сложнее делать - к джойнам привыкать придеться - даже вон Ораклистов уже заставили к ним привыкать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 11:00 |
|
||
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 11:06 |
|
||
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
ASCRUS - что ты сказал это конечно понятно! из-за этого в общем то и планировался переход, а в таком случае я еще ОЧЕНЬ ХОРОШО подумаю, а на кой! но представь сколько надо исправить в реально работающем проекте :-(, причем не таком уж и маленьком!!! Всем большое спасибо за ответы! хотя политика партии, мне не совсем понятна все равно! чем им не покатили такие вещи, щас почитаю, что Вы посоветовали и может проникнусь сим Великим Смыслом :-) Еще раз фенкс! буду думать :-(, что я делать край как не люблю :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 11:09 |
|
||
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
2 ASCRUS Виноват, при синтаксисе LEFT OUTER JOIN все работает. Мои товарищи меня поправили - переходили на времянки еще во времена ASA 6, тогда несколько билдов подряд 2 левых объединения глючило - иногда задваивало записи в запросе. Зато при переходе на времянки получили приемущество - возможность для пользователя наложения фильтров на все поля в запросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 16:35 |
|
||
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
авторЗато при переходе на времянки получили приемущество - возможность для пользователя наложения фильтров на все поля в запросе. На джойнах это тоже делается без проблем: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 17:09 |
|
||
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
Рыжий Кота разве синтаксис key join не удобнее, не надо вписывать поля. Он то удобнее, но я недавно наступил на веселые грабли, связанные именно с частым употреблением таких джойнов. В одной из удаленных реплицируемых баз пришлось поудалять часть FK. А клиентский софт единый для всех баз. Естественно, появилась куча сообщений о том, что ASA не знает как связать таблицы. Пришлось переписывать такие запросы и на будущее сделать памятку - использовать сокращенный JOIN только в "одноразовых" ручных запросах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 17:44 |
|
||
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
Согласен однозначно - в логике БД ни в коем случае нельзя употреблять KEY JOIN-ы. Граблей может быть великое множество, которые больно будут бить по лбу. А вот в разовых запросах под себя штука первоклассная :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 17:53 |
|
||
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
ASCRUSНа джойнах это тоже делается без проблем: Код: plaintext 1. 2. 3. А фильтр на поля таблицы b? По правилам левого OUTER JOIN число строк в запросе при этом не уменьшиться, а поля из второй таблицы будут NULL. И это правильно, но как обяснить это пользователю, который хочет получить выборку? Кроме времянок решения не знаю. То есть select... into #T ... select * from #T И любые выборки по любым полям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 10:00 |
|
||
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
Что то я Вас не пойму - в моем запросе "b.Field = @FilterValue2" и есть фильтр на поле "Field" таблицы "b", который накладывается на нее, но не ограничивает записи в таблице "a". Вы это имеете ввиду или что то еще ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 10:41 |
|
||
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
Есть таблица документов T1 Num Summa Val 1 100 1 2 200 2 3 300 NULL 4 400 2 Есть таблица валют T2 Val Val_name 1 USD 2 EUR Необходим табличный просмотр вида Num Summa Val_name 1 100 USD 2 200 EUR 3 300 NULL 4 400 EUR Получить его мы можем запросом select Num, Summa, Val_name from T1, t2 where t1.val*=t2.val Пользователь хочет при работе с табличным просмотром иметь возможность наложить фильтр на любое поле просмотра, например Val_name='USD', если написать select Num, Summa, Val_name from T1, t2 where t1.val*=t2.val and Val_name='USD' то получим Num Summa Val_name 1 100 USD 2 200 NULL 3 300 NULL 4 400 NULL А по постановке надо Num Summa Val_name 1 100 USD Вот и делаем select Num, Summa, Val_name into #t from T1, t2 where t1.val*=t2.val Далее select Num, Summa, Val_name from #t И потом, при наложении фильтра select Num, Summa, Val_name from #t where Val_name='USD' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 12:38 |
|
||
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
ну во первых странно мне видеть суммы по документам с неизвестной валютой, да ладно, возьмем Ваш пример за рабочий. Посмотрим что получим. авторНеобходим табличный просмотр вида Num Summa Val_name 1 100 USD 2 200 EUR 3 300 NULL 4 400 EUR Получить его мы можем запросом select Num, Summa, Val_name from T1, t2 where t1.val*=t2.val вариант на джойнах: Код: plaintext 1. 2. авторПользователь хочет при работе с табличным просмотром иметь возможность наложить фильтр на любое поле просмотра, например Val_name='USD', если написать select Num, Summa, Val_name from T1, t2 where t1.val*=t2.val and Val_name='USD' то получим Num Summa Val_name 1 100 USD 2 200 NULL 3 300 NULL 4 400 NULL аналогично получим такой вывод результата на запросе: Код: plaintext 1. 2. далее мне от Вас удивительно это слышать: авторА по постановке надо Num Summa Val_name 1 100 USD Вот и делаем select Num, Summa, Val_name into #t from T1, t2 where t1.val*=t2.val Далее select Num, Summa, Val_name from #t И потом, при наложении фильтра select Num, Summa, Val_name from #t where Val_name='USD' гм, кто мешает написать вот так: Код: plaintext 1. 2. 3. Так вот - Ваши рассуждения как раз показывают о неоднозначности соединений TSQL и Ваши извраты с времянками как раз и предназначены для их обхода. В случаях с джойнами мы можем явно регулировать и комбинировать любые способы соединений и фильтров. Вывод один - учите матчасть, то бишь джойны :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 13:51 |
|
||
|
Объединение нескольких таблиц в ASA 8
|
|||
|---|---|---|---|
|
#18+
Там где валюта NULL - документ рублевый. Есть там еще поле и "сумма в национальной валюте" Согласен, Ваш запрос SELECT Num, Summa, Val_name FROM t1 LEFT JOIN t2 ON t2.val = t1.val WHERE t2.val_name = 'USD'; дает нужный результат. Пошел учить матчасть. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 15:21 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=32862690&tid=2013974]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 163ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...