Вниз
Скачать: CL | DM;

Соединение двух таблиц по полю у которых могут быть значения 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 вся ветка

Скачать: CL | DM;



Память: 0.53 MB
Время: 0.014 c
14-44866
Sedunov Vitaly
2003-06-27 10:17
2003.07.14
EhLib, RxLib for Delphi 7


1-44717
BillyJeans
2003-06-23 11:47
2003.07.14
Как нажатием на кнопку прервать программный цикл?


6-44790
ArtAlex
2003-05-09 00:31
2003.07.14
web-формы


1-44701
dimon1979
2003-06-30 12:49
2003.07.14
Встроенный ассемблер


3-44597
Ann
2003-06-21 11:12
2003.07.14
FreeReport




   Наверх