Форум: "Базы";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];
ВнизСоединение двух таблиц по полю у которых могут быть значения null Найти похожие ветки
← →
McSimm2 (2003-06-20 14:59) [0][Oracle]
Как связать две таблицы ??
select *
from table t1, table t2
where t1.field1 = t2.field1(+) and
t1.field2 = t2.field2(+)
Всё связывается, но если значение полей
t1.field2 ,t2.field2 is null, то связь не проходит....
как быть ?
← →
Mike1 Kouzmine1 (2003-06-20 15:01) [1]or (isnull(f1) and isnull(f2))
← →
stone (2003-06-20 15:01) [2]select *
from table t1 left outer join table t2
on t1.field1 = t2.field1 and t1.field2 = t2.field2
← →
stone (2003-06-20 15:02) [3]если null может быть с двух сторон тогда full outer join
← →
Johnmen (2003-06-20 15:05) [4]Чтобы что-то связать, надо иметь что-то, к чему привязаться.
Если null связывается с null, то что-то "Не то в консерватории", как говорит АП...:)
← →
McSimm2 (2003-06-20 15:07) [5]Да ну... А если, допустим такая ситуация , что связка по улице и дому, а квартиры нет...
← →
Соловьев (2003-06-20 15:09) [6]
> что связка по улице и дому,
а при чем здесь квартира?
← →
Johnmen (2003-06-20 15:12) [7]а причем здесь дом ?
← →
McSimm2 (2003-06-20 15:12) [8]>> Соловьев © (20.06.03 15:09)
Это к тому, что значение поля очень да же может быть null и это стандартная ситуация и в данной ситуации нужно как то связывать эти таблицы
← →
Соловьев (2003-06-20 15:15) [9]структуру таблиц в студию!
← →
McSimm2 (2003-06-20 15:17) [10]select *
from table t1, table t2
where t1.улица = t2.улица(+) and
t1.дом = t2.дом(+) and
t1.квартира = t2.квартира(+)
У дома квартиры может не быть тогда два адреса не "вяжутся" ...
← →
Соловьев (2003-06-20 15:20) [11]это че? Oracle?
и что в результате хотим? какая цель запроса?
и все-таки структуру БД хотелось бы глянуть...
← →
Anatoly Podgoretsky (2003-06-20 15:21) [12]Johnmen © (20.06.03 15:05)
Хуже - это уже беспредел.
← →
Johnmen (2003-06-20 15:23) [13]Как это не "вяжутся" ??? Откинь квартиру - и повяжутся :)
where (t1.улица = t2.улица(+) and
t1.дом = t2.дом(+) and
t1.квартира = t2.квартира(+) and
(t1.квартира not null) and (t2.квартира)) or ...
Ну а ... сам сообразишь :)
← →
Johnmen (2003-06-20 15:23) [14]Как это не "вяжутся" ??? Откинь квартиру - и повяжутся :)
where (t1.улица = t2.улица(+) and
t1.дом = t2.дом(+) and
t1.квартира = t2.квартира(+) and
(t1.квартира not null) and (t2.квартира not null)) or ...
Ну а ... сам сообразишь :)
← →
McSimm2 (2003-06-20 15:25) [15]>> это че? Oracle?
Вопрос читай внимательнее, тогда и поймёш чё это...
А по структуре, что ты хочешь в ней увидеть ???
Пусть будут :Две таблицы по четыре поля в каждой.
table1 (Улица, дом , кв-ра, поле1)
table2 (Улица, дом , кв-ра, поле2)
Результат:
Улица, дом , кв-ра, поле1,поле2(значение1)
Улица, дом , кв-ра, поле1,поле2(значение2)
← →
Anatoly Podgoretsky (2003-06-20 15:31) [16]Постановкой задачи и проектированием базы не пробовал заниматься
← →
McSimm2 (2003-06-20 15:33) [17]>> Anatoly Podgoretsky © (20.06.03 15:31)
Где то в этом вопрос стоял?? Проектирование...- эт уже без тебя спроектировано...
← →
Johnny Smith (2003-06-20 15:37) [18]А NVL не спасает?
← →
McSimm2 (2003-06-20 15:39) [19]> Johnny Smith © (20.06.03 15:37)
А что это такое ? :(
← →
Соловьев (2003-06-20 15:41) [20]
> Улица, дом , кв-ра, поле1,поле2(значение1)
> Улица, дом , кв-ра, поле1,поле2(значение2)
а что ты хочешь увидеть в поле1, поле2?
← →
roottim (2003-06-20 15:41) [21]тут бред какой-то...
если ты хочеш связать просто по 3-м полям а кваритра мб нулл
а нулл как известно нулл не равно :-) то есть варианты
-- ОДИН ВАРИАНТ
select *
from table t1, table t2
where t1.улица = t2.улица and
t1.дом = t2.дом and
NVL(t1.квартира, -1) = NVL(t2.квартира, -1)
-- ВТОРОЙ
select *
from table t1, table t2
where t1.улица = t2.улица and
t1.дом = t2.дом
and t1.квартира is null
and t2.квартира is null
union all
select *
from table t1, table t2
where t1.улица = t2.улица and
t1.дом = t2.дом and
t1.квартира = t2.квартира
and t1.квартира is not null
and t2.квартира is not null
я думаю так...
← →
Johnmen (2003-06-20 15:44) [22]>McSimm2 (20.06.03 15:39)
>> Johnny Smith © (20.06.03 15:37)
>А что это такое ? :(
Абзац...:( Человек работает с Ораклом...:(
← →
McSimm2 (2003-06-20 15:46) [23]> Соловьев © (20.06.03 15:41)
Соответствующие значения...
Чесно говоря не совсем понятно, что ты хочешь от меня узнать...
Пусть поле1 будет фамилия человека который прописан в кв-ре, а поле2 - проживающие там...
Улица1, дом1 , кв-ра1, Иванов И.И, Иванова И.И.
Улица1, дом1 , кв-ра1, Иванов И.И, Иванова А.А.
Улица1, дом1 , кв-ра1, Иванов И.И, Иванова Я.Я.
Улица1, дом1 , кв-ра2, Петров И.И, Петров И.И.
Улица1, дом1 , кв-ра3, Сидоров И.И, Сидоров И.И.
Улица1, дом1 , кв-ра3, Сидоров И.И, Сидоров А.А.
← →
Anatoly Podgoretsky (2003-06-20 15:46) [24]Я не верю, что в таблицах нет поля связи
← →
McSimm2 (2003-06-20 15:49) [25]>> roottim (20.06.03 15:41)
Эт ты прав уже бред начинается....
А по поводу проблемы того, что null и null не равны - это так и есть и связь по 3 полям требуется...
За ответ спасибо... Щас попробую
← →
McSimm2 (2003-06-20 15:50) [26]>> Anatoly Podgoretsky © (20.06.03 15:46)
Ну что сказать ??? Такова организация БД - мне приходиться только результаты разгребать .... :(
← →
Anatoly Podgoretsky (2003-06-20 15:52) [27]Так с перепроектирования и начать, ввести ключи для сущности и уже по ним связь обеспечивать, иначе у тебя ситуация просто бредовая.
← →
McSimm2 (2003-06-20 15:55) [28]Johnmen © (20.06.03 15:44)
> Абзац...:( Человек работает с Ораклом...:(
В этом есть что то постыдное? В моём вопросе? Да работаю ....
Ответ откопал вот ....
This function can be used to protect you during comparisons and mathematical functions where the variables may evaluate to null.
← →
McSimm2 (2003-06-20 15:58) [29]> Anatoly Podgoretsky © (20.06.03 15:52)
Организация 10 лет писала на клипере и фокспро - у каждого была возможность зайти в таблицу и добавить поле по своей необходимости и желанию . В Рез-те есть базы по 120 полей. Ключевых полей нет !!! Название полей - ужасны.
После такой трагедии - была выдвинута идея мной - всё это барахло переписать !!! Но сам понимаешь - какие проблемы стоят с этим ....
← →
McSimm2 (2003-06-20 16:00) [30]>roottim (20.06.03 15:41)
Большое спасибо - первый вариант работает 100% !!! Функцию NVL взял на вооружение ...
← →
stone (2003-06-20 16:03) [31]
> После такой трагедии - была выдвинута идея мной - всё это
> барахло переписать !!!
Инициатива, к сожалению, наказуема...
← →
McSimm2 (2003-06-20 16:06) [32]> stone © (20.06.03 16:03)
Знание Oracle в жизни я думаю больше востребованы, нежели клиперовские... Так что IMHO лучше уж закапываться в Oracle.
← →
stone (2003-06-20 16:07) [33]
> Так что IMHO лучше уж закапываться в Oracle.
Это факт :))
← →
Johnmen (2003-06-20 16:10) [34]>McSimm2 (20.06.03 15:55)
>В этом есть что то постыдное? В моём вопросе?
Да нет, конечно. Просто мне это странно, когда человек работает с к.-л. СУБД и не в курсе основных моментов...:)
← →
Anatoly Podgoretsky (2003-06-20 16:10) [35]McSimm2 (20.06.03 15:58)
Но сейчас то кто мешает добавить ключевое поле и рабоать уже с ним, чем мучиться с таким маразмом? Одно поле в дополнение к этим трем, а эти три при связи уже не использовать.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.008 c