Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.023 c
3-1088174881
*boba*
2004-06-25 18:48
2004.07.18
Запрос?


1-1088754602
Tahion2
2004-07-02 11:50
2004.07.18
Нарисовать текст в HICON


3-1087885186
Top100
2004-06-22 10:19
2004.07.18
Insert into ????


1-1089202095
Kurt
2004-07-07 16:08
2004.07.18
Ожидание события


4-1086538728
^GENTLY^
2004-06-06 20:18
2004.07.18
Вопрос по SetWindowLong(FindWindow(nil,Pchar(ListBox1.Items[listb