Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-44839
Карелин Артем
2003-06-26 13:01
2003.07.14
Как вам такой код? По-моему ужасно.


14-44807
kaif
2003-06-12 23:34
2003.07.14
---|Ветка была без названия|---


1-44688
Sergey26
2003-06-30 17:43
2003.07.14
Edit


6-44798
Novichek
2003-04-24 19:05
2003.07.14
Вопрос по CGI: как узнать текущие URL?


7-44917
Giga-Byte
2003-05-01 00:18
2003.07.14
Не подскажете как запустить сервер удалённого доступа в NT (ХР)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский