Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 В чем ошибка ?  [new]
kirser
Member

Откуда: Киев
Сообщений: 225
Тыкните носом, пожалуйста, где ошибся в запросе:
Правильно:
select * from 
	#import a,
	glco c,
	armaster d,
	OsmEra_MoneyType1C e
 where 
   d.customer_code=*'Ф_'+substring('DMS090706',1,3)+'_'+right('0000000'+convert(varchar,a.customer_id),7)
 and a.cash_acct_flag*=e.cash_flag
 and e.trx_type='2211'

неправильно:
select *  from 

	#import a
	left  join OsmEra_MoneyType1C e on a.cash_acct_flag=e.cash_flag
										and e.trx_type=2211
	right join armaster d on d.customer_code='Ф_'+substring('DMS090706',1,3)+'_'+right('0000000'+convert(varchar,a.customer_id),7)
	cross join glco c
Спасибо
17 июл 09, 18:22    [7431051]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
kirser
неправильно
А как Вы узнали, правильно или нет?
Что именно в результате запроса стало не таким как надо?
17 июл 09, 18:26    [7431079]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
kirser
Member

Откуда: Киев
Сообщений: 225
Паганель,
да, именно.
я переделываю запросы по совместимость 2005-го сервера. результаты запросов отличаются
17 июл 09, 18:28    [7431085]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
kirser
результаты запросов отличаются
ну...я догадался... но чем они отличаются?
17 июл 09, 18:32    [7431111]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
очевидно, что
e.trx_type='2211'
должно попасть в where

для спящего время бодрствования равносильно сну
17 июл 09, 18:34    [7431124]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
kirser
Member

Откуда: Киев
Сообщений: 225
Алексей2003
очевидно, что
e.trx_type='2211'
должно попасть в where

для спящего время бодрствования равносильно сну


Можно глупый вопрос ?
Почему "должно" ?
17 июл 09, 18:38    [7431146]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
потому что звездочек нету в старом запросе.

для спящего время бодрствования равносильно сну
17 июл 09, 18:39    [7431152]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
kirser
Member

Откуда: Киев
Сообщений: 225
Алексей2003,
но какие же "звездочки" , если отбираем по известной переменной ?
17 июл 09, 18:41    [7431167]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
вы вообще разницу понимаете между
условием в left join и в where?

для спящего время бодрствования равносильно сну
17 июл 09, 18:42    [7431171]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
kirser
Member

Откуда: Киев
Сообщений: 225
Алексей2003,
уже понял, что нет, не понимаю

в двух словах можете обьяснить?
17 июл 09, 18:47    [7431186]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
в left join условие накладывается на присоединение таблицы,
а в where условие накладывается на результирующую выборку.

для спящего время бодрствования равносильно сну
17 июл 09, 18:48    [7431192]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
так же вполне очевидно, что результат запроса будет одинаков что при right left джоин, что при всех inner джоины. потому как armaster самая левая таблица, и к ней в старом запросе накладывается фильтр на результирующий набор.

для спящего время бодрствования равносильно сну
17 июл 09, 18:50    [7431197]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
тьфу, точнее наоборот самая правая.

для спящего время бодрствования равносильно сну
17 июл 09, 18:50    [7431201]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
select *
from #import a cross join glco c
left join armaster d on d.customer_code='Ф_'+substring('DMS090706',1,3)+'_'+right('0000000'+convert(varchar,a.customer_id),7)
left join OsmEra_MoneyType1C e on a.cash_acct_flag=e.cash_flag
where e.trx_type='2211';
Непогятно только, почему
'Ф_'+substring('DMS090706',1,3)+'_'+right('0000000'+convert(varchar,a.customer_id),7)
а не
'Ф_DMS_+right('0000000'+cast(a.customer_id as varchar),7)
?
17 июл 09, 18:51    [7431203]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
kirser
Member

Откуда: Киев
Сообщений: 225
Алексей2003,
и как, по Вашему мнению далжен выглядеть новый результат?
так :
 from 

	#import a
	left  join OsmEra_MoneyType1C e on a.cash_acct_flag=e.cash_flag
										--and e.trx_type=2211
	right join armaster d on d.customer_code='Ф_'+substring('DMS090706',1,3)+'_'+'0009946'
	cross join glco c
where e.trx_type=2211
?
17 июл 09, 18:52    [7431210]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
а вы выполните.

для спящего время бодрствования равносильно сну
17 июл 09, 18:54    [7431217]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
kirser
Member

Откуда: Киев
Сообщений: 225
iap
select *
from #import a cross join glco c
left join armaster d on d.customer_code='Ф_'+substring('DMS090706',1,3)+'_'+right('0000000'+convert(varchar,a.customer_id),7)
left join OsmEra_MoneyType1C e on a.cash_acct_flag=e.cash_flag
where e.trx_type='2211';
Непогятно только, почему
'Ф_'+substring('DMS090706',1,3)+'_'+right('0000000'+convert(varchar,a.customer_id),7)
а не
'Ф_DMS_+right('0000000'+cast(a.customer_id as varchar),7)
?


ОБьясните пож-та, почему armaster через left
17 июл 09, 18:56    [7431230]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Алексей2003
а вы выполните.
А автор тем временем изменил условия соединения таблиц:
kirser
...d.customer_code='Ф_'+substring('DMS090706',1,3)+'_'+'0009946'...
и сейчас он опять скажет, что результат отличается от желаемого
И опять не скажет - чем именно
17 июл 09, 18:57    [7431236]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
kirser
Member

Откуда: Киев
Сообщений: 225
Паганель,
результат выполнения скрипта, предложенный Алексеем2003, как раз правильный
17 июл 09, 19:00    [7431249]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
kirser
Паганель,
результат выполнения скрипта, предложенный Алексеем2003, как раз правильный
И можно посмотреть на запрос, который получился?
17 июл 09, 19:04    [7431259]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
kirser
Member

Откуда: Киев
Сообщений: 225
Паганель,
select *
from #import a cross join glco c
left join armaster d on d.customer_code='Ф_'+substring('DMS090706',1,3)+'_'+right('0000000'+convert(varchar,a.customer_id),7)
left join OsmEra_MoneyType1C e on a.cash_acct_flag=e.cash_flag
where e.trx_type='2211'
17 июл 09, 19:05    [7431264]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
kirser
Паганель,
результат выполнения скрипта, предложенный Алексеем2003, как раз правильный
Что-то не могу найти этот скрипт.
Ссылку дайте, пожалуйста.
17 июл 09, 19:12    [7431294]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
2iap
у вас с outer join неправильность вышла..
select *
from armaster d
left join #import a on d.customer_code='Ф_'+substring('DMS090706',1,3)+'_'+right('0000000'+convert(varchar,a.customer_id),7)
left join OsmEra_MoneyType1C e on a.cash_acct_flag=e.cash_flag
cross join glco c
where e.trx_type='2211';
вот это если все переписать через left join будет корректным, в сравнении с первым запросом.

2kirser
из этого запроса видно, почему в старом запросе совершенно неактуальны были звездочки, которые обозначают outer join.

для спящего время бодрствования равносильно сну
17 июл 09, 19:12    [7431296]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
2iap
тынц?

для спящего время бодрствования равносильно сну
17 июл 09, 19:13    [7431298]     Ответить | Цитировать Сообщить модератору
 Re: В чем ошибка ?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
так ведь iap уже говорил, что
'Ф_'+substring('DMS090706',1,3)
можно заменить на константу

и непонятно почему 2211 то в кавычках, то без

ну и правилом хорошего тона является обязательное указание длины после слова varchar
17 июл 09, 19:13    [7431299]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить