Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Select с извращением, нужна помощь  [new]
GreenKSV
Guest
Вопрос может простой может сложный вот огрызок запроса

SELECT CH_70_S.TAB_N, KADRY.FAMALIO, LIC_CH.KOD_ZPL, LIC_CH.ARGUM,
LIC_CH.PARAM ,PARAM.PRIZNAK, LIC_CH.SUM_ZPL, ……

FROM LIC_CH, KADRY, PARAM,CH_70_S, ……

WHERE CH_70_S.DATA_F=LIC_CH.DATA_F
AND CH_70_S.OTD=LIC_CH.OTD
AND CH_70_S.TAB_N=LIC_CH.TAB_N
AND CH_70_S.TAB_N=KADRY.TAB_N
AND LIC_CH.KOD_TYP="+"
AND LIC_CH.SUM_ZPL<>0
AND LIC_CH.ID_PRM=PARAM.ID
AND ……

……

Бывают варианты когда в Select PARAM.PRIZNAK поле не находится так как условие WHERE ……. LIC_CH.ID_PRM=PARAM.ID не выполняется, мне надо, что в этих случаях SELECT брал из остальных баз данные а в PARAM.PRIZNAK вставлялось все что угодно, лучше пробел, или ни чего не ставил null
Да и у меня это поле в груп бай используется, естественно можно его назвать по другому. Может переменную какую объявить , тогда как правильней, просто SQL пока по сути не знаю.
Какие есть варианты выхода из ситуации? Желательно попроще и покороче.
Выборка должна быть в пределах одного SELECT.
при чем надо это срочно)))))))))))
20 дек 03, 14:21    [468240]     Ответить | Цитировать Сообщить модератору
 Re: Select с извращением, нужна помощь  [new]
Youry
Member

Откуда: Киев
Сообщений: 70
Попробуйте LEFT JOIN
20 дек 03, 14:59    [468264]     Ответить | Цитировать Сообщить модератору
 Re: Select с извращением, нужна помощь  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145719
Похоже Вам надо соединять таблицы не во WHERE, а в JOIN. И для соединения того, чего может и не быть использовать LEFT OUTER JOIN
20 дек 03, 15:02    [468266]     Ответить | Цитировать Сообщить модератору
 Чуть не забыл, ВСЕМ СПАСИБО, все получилось(-)  [new]
GreenKSV
Guest
Все получилось
20 дек 03, 15:36    [468279]     Ответить | Цитировать Сообщить модератору
 Re: Select с извращением, нужна помощь  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Вообще то при таком написании запроса однозначно происходит INNER JOIN (внутреннее соединение). Если же вместо "чистого" знака равенства в условии WHERE применить *= или =*, то будут применены соответственно либо левое внешнее соединение (LEFT OUTER JOIN), либо правое (RIGHT OUTER JOIN).

BOL:

Transact-SQL Joins

In earlier versions of Microsoft® SQL Server™ 2000, left and right outer join conditions were specified in the WHERE clause using the *= and =* operators. In some cases, this syntax results in an ambiguous query that can be interpreted in more than one way. SQL-92 compliant outer joins are specified in the FROM clause and do not result in this ambiguity. Because the SQL-92 syntax is more precise, detailed information about using the old Transact-SQL outer join syntax in the WHERE clause is not included with this release. The syntax may not be supported in a future version of SQL Server. Any statements using the Transact-SQL outer joins should be changed to use the SQL-92 syntax.

The SQL-92 standard does support the specification of inner joins in either the FROM or WHERE clause. Inner joins specified in the WHERE clause do not have the same problems with ambiguity as the Transact-SQL outer join syntax.
22 дек 03, 07:11    [468747]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить