Форум: "Базы";
Текущий архив: 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