Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Вниз

Здравствуйте. Вот не соображу с запросом   Найти похожие ветки 

 
TohaNik ©   (2004-06-25 17:41) [0]

Есть таблицы OPERATIONS - 1
                       OP_ID
                       OP_TO_POS_ID
                       OP_FROM_POS_ID
            POSITIONS  - 2
                       POS_ID
                       ORD_ID
            ORDERS     - 3
                       ORD_ID
                       ORD_NO

Возможные значения в OPERATIONS

                   OP_ID  OP_TO_POS_ID  OP_FROM_POS_ID
                   1      10            другое из 2
                   2      другое из 2   10
                   3      10            10
                   4      null          10
                   5      10            null
Нужно получить в разных столбцах ORD_NO для OP_TO_POS_ID и  OP_FROM_POS_ID
Вот не могу одним запросом
записи одного из столбцов с нулами вылетают


 
Sandman25 ©   (2004-06-25 17:43) [1]

Если cross join не поддерживается, то можно через
select
...
union all
select
...
where ... is null


 
Sandman25 ©   (2004-06-25 17:46) [2]

Хотя вообще-то я неправильно написал.
Обычный запрос с left join и двумя парами таблиц positions и orders


 
TohaNik ©   (2004-06-25 18:51) [3]

Почемуто часа 2 с unionami мучился
>>Обычный запрос с left join и двумя парами таблиц

Работает:))


 
Курдль   (2004-06-25 19:05) [4]


> записи одного из столбцов с нулами вылетают

Если поля OP_TO_POS_ID, OP_FROM_POS_ID - NOT NULL и правильно оформлены, как внешние ключи к таблице POSITIONS (как и поле ORD_ID к таблице ORDERS), то никаких нулевых полей не будет:


select *
from OPERATIONS OP, POSITIONS P1, ORDERS OR1,  POSITIONS P2, ORDERS OR2
where P1.POS_ID = OP.OP_TO_POS_ID and P1.ORD_ID = OR1.ORD_ID
and P2.POS_ID = OP.OP_FROM_POS_ID and P2.ORD_ID = OR2.ORD_ID


 
TohaNik ©   (2004-06-25 19:20) [5]

>>Если поля OP_TO_POS_ID, OP_FROM_POS_ID - NOT NULL и правильно оформлены, как внешние ключи к таблице POSITIONS

Как - то в потрепаться было по поводу вредности NULL.
НО в данном случае на позицию могут перебрасываться пакеты
из так называемого свободного наличия и наоборот.
Ничего лучше чем NULL не придумал для тех пакетов
для которых не существовало до операции позиции или не
будет существовать после операции.


 
Курдль   (2004-06-25 19:29) [6]

Не знаю, как можно трепаться о полезности/бесполезности NULL во внешних ключах, если это жесточайше связано с логикой целостности данных. Тут к гадалке ходить не надо - смотри ER-модель и делай, как нарисована связь (да CASE-инструменты и сами безошибочно сгенерят БД и проставят полю Null / Not Null).

Так что, могут быть OP_TO_POS_ID и OP_FROM_POS_ID NULL, или нет?
Если могут, то все равно union здесь ни при чем! Тогда нужно 2 внешних соединения к таблице OPERATIONS.


 
TohaNik ©   (2004-06-25 19:57) [7]

>>Не знаю, как можно трепаться о полезности/бесполезности NULL во внешних ключах, если это жесточайше связано с логикой целостности данных. Тут к гадалке ходить не надо - смотри ER-модель и делай, как нарисована связь (да CASE-инструменты и сами безошибочно сгенерят БД и проставят полю Null / Not Null).

Слушай, твоя категоричность поражает%)
Какие внешние ключи?
Какие ру-у-ки, какие но-о-ги. (с)
Отслеживается движение пакетов труб между позициями заказов по разным причинам:)  
Если труба пришла не из заказа а из т.н. свободного наличия - то какой м.б. внешний ключ, позиции то не было , а знать надо что именно из св. наличия

>>(да CASE-инструменты и сами безошибочно сгенерят БД и проставят полю Null / Not Null)

Безошибочно ничего не бывает и CASE - ИМХО - можно использовать
для помощи , но слепо доверять....???


 
Курдль   (2004-06-25 20:15) [8]

В данном случае я готов отстаивать свою категоричность.
Если есть логическая связь таблиц (reference), то по законам реляционных БД, должны быть и внешние ключи! Иначе данные рано или поздно рухнут!

Схему фрагмента БД набросать можешь?

А ка ты Delphi используешь? Для помощи? Мог бы в кодах процессора программировать, если делфе не доверяешь. А CASE-инструменты лишь исполняют рутинную работу по генерации скриптов и т.п. из "чистой идеи" разработчика, документированной в виде модели. Кстати, мой Power Designer отлавливает 90% ошибок еще на этапе начального проектирования базы.


 
TohaNik ©   (2004-06-25 20:26) [9]

>>Тогда нужно 2 внешних соединения к таблице OPERATIONS.

Сорри - они у меня созданы.
Это у меня галлюцинации - прочитал как к таблице POSITIONS

>> Если могут, то все равно union здесь ни при чем!
В этом случае при UNION возвращалась одна строка ну или я тупил:)
4    null      10
5    10       null


 
Курдль   (2004-06-25 20:40) [10]

Так разговор не пойдет, даже несмотря на то, что мне в ближайший час нефиг делать :)

Нарисуешь модель - перетрем дальше. Типа:

_________OP_FROM_POS_ID = POS_ID_________                 _____
|OPERATION|>o------------------+|POSITION |               |ORDER|
|         |                     |         |ORD_ID = ORD_ID|     |
|         |                     |         |>o------------+|     |
|         |OP_TO_POS_ID = POS_ID|         |               |     |
|_________|>o------------------+|_________|               |_____|



 
TohaNik ©   (2004-06-25 20:53) [11]

Все правильно нарисовал:). И ключи есть - все 3.
Только OP_TO_POS_ID м.б. NULL если труба пришла не с др. заказа,
а из свободного наличия
а OP_FROM_POS_ID м.б. NULL если труба В свободное наличие,
Ну и обе не NULL если движение между заказами
Нужно было вытащить все ORD_ID для интересующей POSITIONS.POS_ID
чтобы отследить - вы откуда и куда.
Что я успешно сделал при помощи >Sandman25 ©  (25.06.04 17:46) [2]



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.043 c
14-1088426606
Sodom
2004-06-28 16:43
2004.07.18
Доменная авторизация. Создание своего модуля к apache.


3-1087989291
quQuev
2004-06-23 15:14
2004.07.18
Не получается считать из BLOB поля больше 32Kb


1-1088752276
borow
2004-07-02 11:11
2004.07.18
Ищу компонент


14-1088118720
D@rk
2004-06-25 03:12
2004.07.18
Макс Фрай ...


1-1088742718
r9000
2004-07-02 08:31
2004.07.18
Удаление из памяти Excel





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