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

Откуда: Санкт-Петербург
Сообщений: 16
Создаю 2 таблицы:

select CUSTOMER 
into mas_22
from Sale
where DATE = '20130822' 


select CUSTOMER 
into mas_23
from Sale
where DATE = '20130823' 


В которые заносятся данные за определенные числа.
Затем,на основании этих таблиц делаю запрос:
select *
from mas_22 a LEFT JOIN mas_23 b on a.customer=b.customer
where mas_22.Customer is not null


Эта строчка не верна, но надо, чтобы не было null значений.
WHERE mas_22.Customer IS NOT NULL

Когда пишу эту строчку,появляется ошибка
"The multi-part identifier "mas_23.Customer" could not be bound."

// Null значения только в mas_23
// Текст ошибки я и сама перевести могу. Мне причина не понятна.
28 авг 13, 06:19    [14763602]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться от значения NULL  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Запрос
select CUSTOMER 
from Sale
where DATE = '20130822' 
and CUSTOMER is null
что-нибудь вернет?

Сообщение было отредактировано: 28 авг 13, 06:50
28 авг 13, 06:50    [14763619]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться от значения NULL  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 658
NatashaM
select *
from mas_22 a LEFT JOIN mas_23 b on a.customer=b.customer
where mas_22.Customer is not null

"The multi-part identifier "mas_23.Customer" could not be bound."
// Null значения только в mas_23
// Текст ошибки я и сама перевести могу. Мне причина не понятна.


Как-то все намешано... Если вы указали алиас для таблицы, то будте любезны обращаться к ней именно по этому алиасу.

А что бы не пришлось писать условия "is not null" изучите какие бывают соединения и используйте нужное (inner)
А еще лучше не создавать 2 постоянные таблицы для такого запроса а просто соединить таблицу саму с собой
28 авг 13, 06:53    [14763620]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться от значения NULL  [new]
NatashaM
Member

Откуда: Санкт-Петербург
Сообщений: 16
tpg,возвращает только заголовок поля. Записей нет.
28 авг 13, 09:09    [14763846]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться от значения NULL  [new]
NatashaM
Member

Откуда: Санкт-Петербург
Сообщений: 16
Guf, вот оно! Решение)) Спасибо)
А почему так? TSQL в этом плане так принципиален?
28 авг 13, 09:10    [14763853]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться от значения NULL  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
NatashaM
Guf, вот оно! Решение)) Спасибо)
А почему так? TSQL в этом плане так принципиален?

Доброе утро.
create table t11 (id int)
create table t22 (id int)
insert t11
select 1
union
select 2
union select 3
insert t22
select 1
union select 3

select * from t11 t join t22 tt ON t.id=tt.id --алиасы не совпадают с названиями таблиц

select * from t11 t join t22 t11 ON t.id=t11.id 
/*тут алиас для второй таблицы является именем первой, 
но т.к. для первой есть алиас t11, то соответственно мы 
можем использовать её имя в качестве алиаса для другой таблицы*/

select * from t11 join t22 t11 ON t11.id=t11.id
/* А здесь мы получим ошибку:
Msg 1012, Level 16, State 1, Line 17
The correlation name 't11' has the same exposed name as table 't11'.
*/

drop table t11
drop table t22

Потому что если вы используете алиас, то фактически на время выполнения запроса фактическое имя таблицы вы можете использовать для другого алиаса.
28 авг 13, 09:18    [14763879]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться от значения NULL  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
NatashaM
А почему так? TSQL в этом плане так принципиален?
Потому что синтаксис языка такой.

http://technet.microsoft.com/ru-ru/library/ms187455(v=sql.105).aspx
Если для таблицы назначен псевдоним, то во всех явных ссылках на таблицу в инструкциях Transact-SQL необходимо использовать псевдоним, а не имя таблицы.
28 авг 13, 09:34    [14763947]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться от значения NULL  [new]
NatashaM
Member

Откуда: Санкт-Петербург
Сообщений: 16
Сергей Викт., спасибо за разъяснение!)
28 авг 13, 09:57    [14764036]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться от значения NULL  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Guf
используйте нужное (inner)

А по каким признакам вы определили, что первоначальный запрос эквивалентен запросу с inner join?
28 авг 13, 11:27    [14764840]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться от значения NULL  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 658
Гость333
А по каким признакам вы определили, что первоначальный запрос эквивалентен запросу с inner join?

Посмотрел в свой хрустальный шар!
И я не говорил, что они эквивалентны. Я предположил что ТС нужен именно inner, потому что ТС путается в показаниях.
NatashaM
Создаю 2 таблицы:

Затем,на основании этих таблиц делаю запрос:
select *
from mas_22 a LEFT JOIN mas_23 b on a.customer=b.customer
where mas_22.Customer is not null

Эта строчка не верна, но надо, чтобы не было null значений.
WHERE mas_22.Customer IS NOT NULL

Когда пишу эту строчку,появляется ошибка
"The multi-part identifier "mas_23.Customer" could not be bound."
// Null значения только в mas_23

Вряд ли 22-ого были продажи без покупателей. Значит НаташаМ ошиблась в условии where, когда постила сообшение. Это подтверждают и сообщение об ошибке. И так как она говорит о "Null значения только в mas_23", то скорее всего она имет ввиду, что после левого внешнего соединения у неё появляются нулы в правой части рекордсета, от которых она желает избавиться.
Вот я подумал, что НаташеМ нужны такие заказчики, которые покупали и 22-ого и 23-его числа. А это inner... вот и всё
28 авг 13, 11:57    [14765059]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить