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