Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

Обозначение пустоты в поле в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.037 c
7-1081610499
Alexis
2004-04-10 19:21
2004.05.23
Вопрос о процессах и не только...


6-1081321631
Сетевик
2004-04-07 11:07
2004.05.23
Список компьютеров в локальной сети


4-1080633000
Владимир Бирюков
2004-03-30 11:50
2004.05.23
Атрибут "Поверх всех" и всплывающее окно принтера


9-1073419589
Stalker_23b
2004-01-06 23:06
2004.05.23
Исповедь домашнего игромейкера


3-1082850562
Михаил
2004-04-25 03:49
2004.05.23
DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский