![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обозначение пустоты в поле в SQL-запросе [D6, IB7.1]
GIL © (2004-04-28 12:46:00)нужно создать запрос приблизительно такого содержания:
select * from main where age=null
как правильно его написать?
HSolo (2004-04-28 14:19:00) [1]Уточняю Deniz © (28.04.04 13:43) [23] : имена полей могут быть чуть-чуть не те, что в таблицах :) Кстати, такое возможно и при явном указании полей, если их имена повторяются и не указаны псевдонимы:
select manager.id, contacts.id ...
вернется что-то типа: id, id1 ...
Deniz (2004-04-28 13:43:00) [2]> GIL © (28.04.04 13:27) [20]
будет ли этот запрос работать?
Конечно! Только, как уже говорили, может выдавать не то что ты хочешь увидеть ;-)
Вместо * проставь все поля которые хочешь видеть в результате, а иначе могут быть колизии неприятные.
GIL (2004-04-28 13:38:00) [3]спасибо
HSolo (2004-04-28 13:35:00) [4]Будет
GIL (2004-04-28 13:27:00) [5]ага и еще вопрос, извините, что не все сразу, но с проблемами надо разбираться постепенно.
select * from users
left join manager on (users.manager_id = manager.id)
left join contacts on (manager.id_contacts=contacts.id)
будет ли этот запрос работать? извините, что задаю такой вопрос, но у меня просто нет записей в таблице.
GIL (2004-04-28 13:18:00) [6]да, спасибо!! Всегда плохо понимал как работать с join'ом
Johnmen (2004-04-28 13:15:00) [7]>Reindeer Moss Eater © (28.04.04 13:09) [13]
Вот ты о чём... Ну да...
Хотя его проблема в другом.
Deniz (2004-04-28 13:15:00) [8]
select *
from users
left join manager on (users.manager_id = manager.id)
Reindeer Moss Eater (2004-04-28 13:15:00) [9]Если должна, то она есть.
GIL (2004-04-28 13:13:00) [10]ну правильно, по первому условию результат пустой, но по второму-то условию должна быть запись!?
GIL (2004-04-28 13:11:00) [11]вот такой запрос выводит то, что надо
select * from users where (manager_id is null)
Reindeer Moss Eater (2004-04-28 13:09:00) [12]Johnmen ©
Не думаю:
запрос неправильный, т.к. в юзерах есть одна запись, которая не связана с манагерами, и в манагерах пусто, IBExpert показывает null в поле связи в таблице юзеров
Он сравнивает два поля (не поле с константой NULL)
Но в одном поле содержится NULL.
Johnmen (2004-04-28 13:07:00) [13]>Reindeer Moss Eater © (28.04.04 13:04) [10]
>Я же говорил, что NULL сравнивать с другим полем - всегда будет
>False. Даже с нулом нул сравнить - будет False.
Он же убрал сравнение = и сравнивает is
:)
Johnmen (2004-04-28 13:05:00) [14]>хотя по идее первый запрос должен выводить все возможные
>комбинации из записей первой и второй таблицы 8(
Вижу, что понимаешь. Теперь наложи (:)) на это WHERE.
Reindeer Moss Eater (2004-04-28 13:04:00) [15]запрос неправильный
Он неправильный потому что его условие возвращает не то, что ты хочешь получить.
Я же говорил, что NULL сравнивать с другим полем - всегда будет False. Даже с нулом нул сравнить - будет False.
Вот и нет таких записей в выборке
Почему бы не почитать документацию по SQL?
Про открытые соединения таблиц?
Johnmen (2004-04-28 13:04:00) [16]>как правильно будет выглядеть следующий запрос
А у тебя есть представление о том, как вообще получается выборка ? Что получим, если просто SELECT * FROM A, B ? И как на это повлияет условие WHERE ?
GIL (2004-04-28 13:03:00) [17]и даже такой запрос ничего не выводит: select * from users,manager
а выводит такой: select * from users
хотя по идее первый запрос должен выводить все возможные комбинации из записей первой и второй таблицы 8(
GIL (2004-04-28 12:59:00) [18]запрос неправильный, т.к. в юзерах есть одна запись, которая не связана с манагерами, и в манагерах пусто, IBExpert показывает null в поле связи в таблице юзеров
Reindeer Moss Eater (2004-04-28 12:56:00) [19]Запрос выглядит правильно, если у сервера к нему нет претензий.
Если сервер не возвращает записи, это не значит что запрос "неправильный".
Это значит нет записей удовлетворяющих запросу
Reindeer Moss Eater (2004-04-28 12:55:00) [20]Потому что любое сравнение с NULL дает FALSE.
1 = NULL => False
1 <> NULL => False