Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

Обозначение пустоты в поле в SQL-запросе   Найти похожие ветки 

 
GIL ©   (2004-04-28 12:46) [0]

нужно создать запрос приблизительно такого содержания:
select * from main where age=null
как правильно его написать?


 
Reindeer Moss Eater ©   (2004-04-28 12:46) [1]

А так тоже правильно


 
Viktor   (2004-04-28 12:48) [2]

еще так
where age is null


 
GIL ©   (2004-04-28 12:53) [3]

проходит только если через is


 
GIL ©   (2004-04-28 12:55) [4]

и еще маленикий вопрос - как правильно будет выглядеть следующий запрос:
select * from users,manager where (users.manager_id=manager.id) or (users.manager_id is null)
тоесть запрос должен выводить записи, где между таблицами есть связь, и где нет


 
Reindeer Moss Eater ©   (2004-04-28 12:55) [5]

Потому что любое сравнение с NULL дает FALSE.

1 = NULL => False
1 <> NULL => False


 
Reindeer Moss Eater ©   (2004-04-28 12:56) [6]

Запрос выглядит правильно, если у сервера к нему нет претензий.
Если сервер не возвращает записи, это не значит что запрос "неправильный".
Это значит нет записей удовлетворяющих запросу


 
GIL ©   (2004-04-28 12:59) [7]

запрос неправильный, т.к. в юзерах есть одна запись, которая не связана с манагерами, и в манагерах пусто, IBExpert показывает null в поле связи в таблице юзеров


 
GIL ©   (2004-04-28 13:03) [8]

и даже такой запрос ничего не выводит: select * from users,manager
а выводит такой: select * from users
хотя по идее первый запрос должен выводить все возможные комбинации из записей первой и второй таблицы 8(


 
Johnmen ©   (2004-04-28 13:04) [9]

>как правильно будет выглядеть следующий запрос

А у тебя есть представление о том, как вообще получается выборка ? Что получим, если просто SELECT * FROM A, B ? И как на это повлияет условие WHERE ?


 
Reindeer Moss Eater ©   (2004-04-28 13:04) [10]

запрос неправильный

Он неправильный потому что его условие возвращает не то, что ты хочешь получить.
Я же говорил, что NULL сравнивать с другим полем - всегда будет False. Даже с нулом нул сравнить - будет False.
Вот и нет таких записей в выборке

Почему бы не почитать документацию по SQL?
Про открытые соединения таблиц?


 
Johnmen ©   (2004-04-28 13:05) [11]

>хотя по идее первый запрос должен выводить все возможные
>комбинации из записей первой и второй таблицы 8(

Вижу, что понимаешь. Теперь наложи (:)) на это WHERE.


 
Johnmen ©   (2004-04-28 13:07) [12]

>Reindeer Moss Eater ©   (28.04.04 13:04) [10]
>Я же говорил, что NULL сравнивать с другим полем - всегда будет
>False. Даже с нулом нул сравнить - будет False.

Он же убрал сравнение = и сравнивает is
:)


 
Reindeer Moss Eater ©   (2004-04-28 13:09) [13]

Johnmen ©
Не думаю:

запрос неправильный, т.к. в юзерах есть одна запись, которая не связана с манагерами, и в манагерах пусто, IBExpert показывает null в поле связи в таблице юзеров

Он сравнивает два поля (не поле с константой NULL)
Но в одном поле содержится NULL.


 
GIL ©   (2004-04-28 13:11) [14]

вот такой запрос выводит то, что надо
select * from users where (manager_id is null)


 
GIL ©   (2004-04-28 13:13) [15]

ну правильно, по первому условию результат пустой, но по второму-то условию должна быть запись!?


 
Reindeer Moss Eater ©   (2004-04-28 13:15) [16]

Если должна, то она есть.


 
Deniz ©   (2004-04-28 13:15) [17]

select *
from users
 left join manager on (users.manager_id = manager.id)


 
Johnmen ©   (2004-04-28 13:15) [18]

>Reindeer Moss Eater ©   (28.04.04 13:09) [13]

Вот ты о чём... Ну да...

Хотя его проблема в другом.


 
GIL ©   (2004-04-28 13:18) [19]

да, спасибо!! Всегда плохо понимал как работать с join"ом


 
GIL ©   (2004-04-28 13:27) [20]

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

select * from users
left join manager on (users.manager_id = manager.id)
left join contacts on (manager.id_contacts=contacts.id)

будет ли этот запрос работать? извините, что задаю такой вопрос, но у меня просто нет записей в таблице.


 
HSolo ©   (2004-04-28 13:35) [21]

Будет


 
GIL ©   (2004-04-28 13:38) [22]

спасибо


 
Deniz ©   (2004-04-28 13:43) [23]

> GIL ©   (28.04.04 13:27) [20]
будет ли этот запрос работать?

Конечно! Только, как уже говорили, может выдавать не то что ты хочешь увидеть ;-)
Вместо * проставь все поля которые хочешь видеть в результате, а иначе могут быть колизии неприятные.


 
HSolo ©   (2004-04-28 14:19) [24]

Уточняю Deniz ©   (28.04.04 13:43) [23] : имена полей могут быть чуть-чуть не те, что в таблицах :) Кстати, такое возможно и при явном указании полей, если их имена повторяются и не указаны псевдонимы:
select manager.id, contacts.id ...
вернется что-то типа: id, id1 ...



Страницы: 1 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.028 c
4-1081453654
cuper
2004-04-08 23:47
2004.05.23
События в чужом окне


6-1080897789
mazepa
2004-04-02 13:23
2004.05.23
TelNet


14-1083692176
Marina_S
2004-05-04 21:36
2004.05.23
Как просмотреть графический файл побайтно?


11-1071417334
New
2003-12-14 18:55
2004.05.23
TKolXLGrid


3-1083053774
neVIP.
2004-04-27 12:16
2004.05.23
Фильтр