Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Стиль ANSI SQL-92 в версии 6.5 по меньшей мере - неадекватен... / 10 сообщений из 10, страница 1 из 1
27.07.2001, 07:13
    #32010492
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стиль ANSI SQL-92 в версии 6.5 по меньшей мере - неадекватен...
Обнаружен 1 странный "глюк" в версии 6.5...
(правда, может я сам не знаю каких-то особо "хитрых" установок SET OPTIONS, вобщем - судите сами...)

Для начала - цитата из BOL для версии 6.5:
New join operators are available in SQL Server 6.5. Because future versions of SQL Server may discontinue support for the "*=" and "=*" outer join operators, it is recommended that you use the ANSI-standard join clauses (LEFT OUTER JOIN, RIGHT OUTER JOIN, and FULL OUTER JOIN) instead.

Далее - берем сервер 6.5+SP5 (@@version=6.50.416) и даем ему на исполнение такой скрипт:

IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE type = 'u' AND name like '#join_source%' )
DROP TABLE #join_source
GO
IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE type = 'u' AND name like '#join_reference%' )
DROP TABLE #join_reference
GO

SET NOCOUNT ON
SET ANSI_DEFAULTS ON

CREATE TABLE #join_source (parent_db char(5), parent_id int, descr varchar(15))
CREATE TABLE #join_reference (child_db char(5), child_id int, descr varchar(15))

INSERT INTO #join_source SELECT 'MAIN1',1,'Андрей'
INSERT INTO #join_source SELECT 'MAIN1',2,'Анатолий'
INSERT INTO #join_source SELECT 'MAIN1',3,'Владимир'
INSERT INTO #join_source SELECT 'MAIN1',4,'Олег'

INSERT INTO #join_reference SELECT 'MAIN1',1,'Ларин'
INSERT INTO #join_reference SELECT 'MAIN1',2,'Дукалис'
INSERT INTO #join_reference SELECT 'FALL2',3,'Казанцев'
INSERT INTO #join_reference SELECT 'MAIN1',4,'Половцев'

SELECT 'Без фильтров по связанной таблице'
SELECT 'Style:'=ISNULL(r.child_db,'QU-QU'),'*='=s.descr,''=r.descr
FROM #join_source s, #join_reference r
WHERE s.parent_db*=r.child_db AND s.parent_id*=r.child_id -- join conditions

SELECT 'Style:'=ISNULL(r.child_db,'QU-QU'),'LEFT OUTER'=s.descr,'JOIN'=r.descr
FROM #join_source s LEFT OUTER JOIN #join_reference r
ON s.parent_db=r.child_db AND s.parent_id=r.child_id -- join conditions

SELECT 'С "мягким" фильтром по связанной таблице'
+CHAR(13)+CHAR(10)+'(все записи связанной таблицы попадают в выборку)'
SELECT 'Style:'=ISNULL(r.child_db,'QU-QU'),'*='=s.descr,''=r.descr
FROM #join_source s, #join_reference r
WHERE s.parent_db*=r.child_db AND s.parent_id*=r.child_id -- join conditions
AND r.child_id <=4 -- filter conditions

SELECT 'Style:'=ISNULL(r.child_db,'QU-QU'),'LEFT OUTER'=s.descr,'JOIN'=r.descr
FROM #join_source s LEFT OUTER JOIN #join_reference r
ON s.parent_db=r.child_db AND s.parent_id=r.child_id -- join conditions
WHERE r.child_id <=4 -- filter conditions

SELECT 'С "жестким" фильтром по связанной таблице'
+CHAR(13)+CHAR(10)+'(одна запись связанной таблицы не попадает в выборку)'
SELECT 'Style:'=ISNULL(r.child_db,'QU-QU'),'*='=s.descr,''=r.descr
FROM #join_source s, #join_reference r
WHERE s.parent_db*=r.child_db AND s.parent_id*=r.child_id -- join conditions
AND r.child_id <=3 -- filter conditions

SELECT 'Style:'=ISNULL(r.child_db,'QU-QU'),'LEFT OUTER'=s.descr,'JOIN'=r.descr
FROM #join_source s LEFT OUTER JOIN #join_reference r
ON s.parent_db=r.child_db AND s.parent_id=r.child_id -- join conditions
WHERE r.child_id <=3 -- filter conditions


А вот и результаты выполнения:


---------------------------------
Без фильтров по связанной таблице

Style: *=
------ --------------- ---------------
MAIN1 Андрей Ларин
MAIN1 Анатолий Дукалис
QU-QU Владимир NULL
MAIN1 Олег Половцев

Style: LEFT OUTER JOIN
------ --------------- ---------------
MAIN1 Андрей Ларин
MAIN1 Анатолий Дукалис
QU-QU Владимир NULL
MAIN1 Олег Половцев

--------------------------------------------------------------------------------------------
С "мягким" фильтром по связанной таблице
(все записи связанной таблицы попадают в выборку)

Style: *=
------ --------------- ---------------
MAIN1 Андрей Ларин
MAIN1 Анатолий Дукалис
QU-QU Владимир NULL
MAIN1 Олег Половцев

Style: LEFT OUTER JOIN
------ --------------- ---------------
MAIN1 Андрей Ларин
MAIN1 Анатолий Дукалис
MAIN1 Олег Половцев

-------------------------------------------------------------------------------------------------
С "жестким" фильтром по связанной таблице
(одна запись связанной таблицы не попадает в выборку)

Style: *=
------ --------------- ---------------
MAIN1 Андрей Ларин
MAIN1 Анатолий Дукалис
QU-QU Владимир NULL
QU-QU Олег NULL

Style: LEFT OUTER JOIN
------ --------------- ---------------
MAIN1 Андрей Ларин
MAIN1 Анатолий Дукалис


И что бы это значило?
...
Рейтинг: 0 / 0
27.07.2001, 08:07
    #32010512
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стиль ANSI SQL-92 в версии 6.5 по меньшей мере - неадекватен...
Про это уже писали в форуме
Перенос условия из LEFT OUTER JOIN в WHERE превращает LEFT OUTER JOIN в INNER JOIN

Т.е.
SELECT 'Style:'=ISNULL(r.child_db,'QU-QU'),'LEFT OUTER'=s.descr,'JOIN'=r.descr
FROM #join_source s LEFT OUTER JOIN #join_reference r
ON s.parent_db=r.child_db AND s.parent_id=r.child_id -- join conditions
WHERE r.child_id <=3 -- filter conditions

превращается в
SELECT 'Style:'=ISNULL(r.child_db,'QU-QU'),'LEFT OUTER'=s.descr,'JOIN'=r.descr
FROM #join_source s INNER JOIN #join_reference r
ON s.parent_db=r.child_db AND s.parent_id=r.child_id -- join conditions
WHERE r.child_id <=3 -- filter conditions
...
Рейтинг: 0 / 0
27.07.2001, 08:51
    #32010527
AlexUnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стиль ANSI SQL-92 в версии 6.5 по меньшей мере - неадекватен...
Помнится, эта ситуация меня чуть не доконала, когда я создавал процедуру работы с прайс-листами. Как только начинаешь использовать Where так сразу приоритет Left join уходит на второе место и получаешь Inner join. В общем, я перенес условие из Where в Left join и все заработало.
...
Рейтинг: 0 / 0
27.07.2001, 10:58
    #32010541
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стиль ANSI SQL-92 в версии 6.5 по меньшей мере - неадекватен...
2 AlexUnik

Спасибо, очень хрошее объяснение...

2 alexeyvg

Я частенько вижу в этом форуме ответы с упоминанием о том, что все "это" уже обсуждалось...
А как бы еще научиться находить среди горы "обсуждений" именно то, что интересует тебя в данный момент?
Судя по частоте таких ответов - народу проще создать свежую "ветку" за 5-10 мин., чем рыться 0.5 часа (если повезет) в поисках нужного ответа.

Есть ли выход из такой ситуации?

2 Moderator

Например, мне было бы гораздо удобнее, чтобы на этом форуме появился раздел, ну скажем - "Фичи", куда тот же уважаемый модератор периодически скидывал бы все топики, в которых обсуждались вещи "неочевидные", "нетривиальные", "оригинальные" и т.д.
Решение об отборе пусть оставляет за собой, или "делегирует" особо доверенным лицам...
...
Рейтинг: 0 / 0
27.07.2001, 13:11
    #32010560
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стиль ANSI SQL-92 в версии 6.5 по меньшей мере - неадекватен...
2 qu-qu
Научиться находить среди горы "обсуждений" именно то, что интересует тебя в данный момент очень просто - для этого есть поиск
...
Рейтинг: 0 / 0
27.07.2001, 15:01
    #32010573
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стиль ANSI SQL-92 в версии 6.5 по меньшей мере - неадекватен...
2 alexeyvg

"Поиск" ... "хрено-иск"...
Зайди, пжлст, на этот поиск, не поленись...
Набери в поле для ввода всего 2 слова - "OUTER" и "JOIN"...
Нажми кнопку и посмотри - что тебе покажется в качестве результатов...

Из 40-ка найденных статей 80% озаглавлены как "Reply to topic" - т.е. в каждую из них надо залезать и просматривать - "а о чем же оно написано?"... А к слову сказать - вот этой конкретной ветки в этих результатах поиска и нету, хотя тут слова "OUTER" и "JOIN" в каждом посте.

О-ч-ч-ч-чень удобный поиск, ничего не скажешь...
...
Рейтинг: 0 / 0
28.07.2001, 08:59
    #32010592
Александр Гладченко
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стиль ANSI SQL-92 в версии 6.5 по меньшей мере - неадекватен...
qu-qu < Этой ветки нет в результатах поиска, т.к. индексирование мы можем себе позвольть только раз в неделю.
Над предложением по поводу коллекции разных Фич нужно подумать: напрашивается создание FAQ и библиотеки скриптов. Что же касается облегчения навигации по форуму и поиска, тут поможет только его полная переделка. Этот форум не расчитан на такой объём новых топиков и такое количество ответов.
...
Рейтинг: 0 / 0
28.07.2001, 14:08
    #32010604
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стиль ANSI SQL-92 в версии 6.5 по меньшей мере - неадекватен...
2 Александр Гладченко

Александр, спасибо Вам за то, что обратили внимание на мое предложение по поводу "коллекции фич", или FAQ-а.
Раз уж я обращаюсь к Вам лично, позвольте выразить Вам свою признательность и восхищение за создание и поддержание в "лучшем виде" такого замечательного и полезного ресурса в Ру-нете.

К сожалению, я ничерта не знаю про возможности настройки UltraBoard v1.6, чтобы советовать что-то конкретное, но согласитесь - вариант "полной" информации, которую выдает скрипт поиска выдает максимум "слов" при минимуме "информации", (вот 1 из примеров т.н. "полного" формата вывода):


1. Использование СУБД, программирование, работа, и т.д. - Reply to Topic [1859387466]
ОТВЕТИТЬ В ТЕМУ Имя Куда Использование СУБД / Microsoft SQL Server / поиск по множеству таблиц Тема Сообщение вы можете использовать ultraboard коды для дополнительного форматирования. (подробнее смотрите помощь) Powered by UltraBoard v1.6...
ОТВЕТИТЬ В ТЕМУ Имя Куда Использование СУБД / Microsoft SQL Server / поиск по множеству таблиц Тема Сообщение вы можете использовать ultraboard коды для дополнительного форматирования. (подробнее смотрите помощь) Powered by UltraBoard v1.6...

http://www.sql.ru/cgi-bin/UltraBoard/UltraBoard.pl?Action=NewReply&Post=926&Board=mssql&Idle=&Sort=&Order=&Page=&Session= (text/html; charset=windows-1251) Tue, 29 May 2001 20:30:16 MSD, 34818 bytes


В эдакой куче текста - НИ ОДНОГО упоминания не только о том - "а что же искалось-то?", но даже - "о чем идет речь в топике", который предложен в качестве "ответа" на запрос поиска... Зато почти вся эта "тряхомудь" (извините за резкость) - аккуратно продублирована, наверное, для большей "полноты" формата.

Сдается мне, что все-таки существующую версию UltraBoard можно-таки "подкрутить", чтобы результаты поиска выглядели немного "информативнее" (уж, по крайней мере, вместо 121-символьного "технического" URL-а статьи можно показать первые 121 символа из ее текста).

Поймите меня правильно, и примите это, пжлст, за "конструктивную критику"... ничего личного...
...
Рейтинг: 0 / 0
28.07.2001, 14:23
    #32010605
judge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стиль ANSI SQL-92 в версии 6.5 по меньшей мере - неадекватен...
2 qu-qu.

Наверное выпользовались поиском по сайту, а есть еще поиск по форуму для этого нужно нажать на кнопочку с лупой и бумажкой.

Успехов.

Regards,
Alexander Sibilev (admin@sql.ru)
...
Рейтинг: 0 / 0
28.07.2001, 15:02
    #32010607
Александр Гладченко
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стиль ANSI SQL-92 в версии 6.5 по меньшей мере - неадекватен...
qu-qu < Спасибо за тёплые слова, которые относятся также к автору сайта Александру Сибилёву.
Конструктивной критике мы только рады, так что сасибо Вам и за это. Будем стараться сделать сайт более удобным. Есдинственное, что не могу обещать, что улучшения и новшества появятся быстро. Проект SQL.RU пока для нас с Александргм только хобби, а времени всегда не хватает...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Стиль ANSI SQL-92 в версии 6.5 по меньшей мере - неадекватен... / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]