Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Помоему сложный запрос ORACLE  [new]
nihon
Member

Откуда:
Сообщений: 17
Вероятно все сталкивались с таким запросом:
Имеется таблица которая хранит в себе 4 foreign key
CREATE TABLE "MODEL" ("NAME" varchar2, "NUM_VS" NUMBER, "RASP" NUMBER ,"NUM_VS2" NUMBER, "RASP2" NUMBER);
(NOTNULL и тд опустил), здесь NUM_VS, NUM_VS2 foreign key таблицы VS.NUM_VS
CREATE TABLE "VS" ( "NUM_VS" NUMBER, "NAME_VS" VARCHAR2)
и RASP, RASP2 foreign key таблицы ELEMVP.ID
CREATE TABLE "ELEMVP" ("ID" NUMBER, "NAME_VP" VARCHAR2, "COMM_VP" VARCHAR2)

Хотелось бы получить одним select-ом если это возможно следующее
model.name, vs.name_vs (по ключу NUM_VS) , vs.name_vs (по ключу NUM_VS2), elemvp.name_vp (по ключу RASP), elemvp.comm_vp (по ключу RASP), elemvp.name_vp (по ключу RASP2), elemvp.comm_vp (по ключу RASP2

Помогите пожалуйста составить запрос :)
6 янв 08, 15:53    [5122413]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
Pr_S_N
Guest
SELECT m.name, 
       vs1.name_vs,
       vs2.name_vs,
       e1.name_vp,
       e1.comm_vp,
       e2.name_vp,
       e2.comm_vp,
  FROM model m, 
       vs vs1,
       vs vs2,
       elemvp e1,
       elemvp e2
 WHERE m.num_vs = vs1.num_vs      
   AND m.num_vs2 = vs2.num_vs
   AND m.rasp = e1.id
   AND m.rasp2 = e2.id
  
6 янв 08, 16:45    [5122479]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
nihon
Member

Откуда:
Сообщений: 17
Спасибо! Не думал, что все так может быть просто :). А подскажите ещё момент возможно ли указание номера столбца в select (select vs.1 from vs, где первый столбец в жизни завется id)?
7 янв 08, 03:07    [5123328]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63971
Блог
nihon
А подскажите ещё момент возможно ли указание номера столбца в select

Даже если бы было возможно, любой вменяемый руководитель разработки (архитектор, ведущий программист итп) отрывал бы за это руки. Указание номера столбца - хрень, которую и в order by не мешало бы выкинуть и сделать хорошо.
7 янв 08, 10:20    [5123443]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116199
softwarer
nihon
А подскажите ещё момент возможно ли указание номера столбца в select

Даже если бы было возможно, любой вменяемый руководитель разработки (архитектор, ведущий программист итп) отрывал бы за это руки. Указание номера столбца - хрень, которую и в order by не мешало бы выкинуть и сделать хорошо.


ИМХО это две несопоставимые хрени :-)
Указание номера столбца в order by призвана облегчить жизнь, но реализация
вызывает вопросы. Указание в select физического номера столбца в таблице -
это хрень размером с Empire State Building
7 янв 08, 11:02    [5123481]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63971
Блог
dmidek
ИМХО это две несопоставимые хрени :-)

Cогласен. В данном случае я акцентировался на том, что и в "относительно безвредном" случае, из которого, скорее всего, растут уши, ту же задачу стоило бы решить по-другому.
7 янв 08, 11:13    [5123496]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
softwarer
Указание номера столбца - хрень, которую и в order by не мешало бы выкинуть и сделать хорошо.
Заодно бы и в Делфи неплохо бы ограничить обращение к данным по номерам столбцов в датасете/дбгриде. А то некоторые разработчики даже запрещают после этого колонки двигать юзеру.
7 янв 08, 18:52    [5124321]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63971
Блог
andreymx
Заодно бы и в Делфи неплохо бы ограничить обращение к данным по номерам столбцов в датасете/дбгриде.

Неплохо бы. Впрочем, у нас это таки "возможность, которая присутствует для полноты картины" - у меня даже есть место, где она удобна и правильна - в то время как у некоторых несчастных это просто единственный вариант на клиенте :)
7 янв 08, 19:35    [5124404]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
softwarer
andreymx
Заодно бы и в Делфи неплохо бы ограничить обращение к данным по номерам столбцов в датасете/дбгриде.
Неплохо бы. Впрочем, у нас это таки "возможность, которая присутствует для полноты картины" - у меня даже есть место, где она удобна и правильна - в то время как у некоторых несчастных это просто единственный вариант на клиенте :)
Конечно, у меня тоже есть положительный пример - копирование данных из датасета в массив - по индексу доступ намного быстрее, чем по имени.
7 янв 08, 19:48    [5124428]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63971
Блог
andreymx
Конечно, у меня тоже есть положительный пример - копирование данных из датасета в массив - по индексу доступ намного быстрее, чем по имени.

Не думаю, что это положительный пример. Во-первых, сама по себе операция сомнительная, в клиенте такие редко нужны. Во-вторых, почти уверен, что у Вас что-то типа

while not Query.Eof do
begin
  ... FieldByName ('a') ...
  ... FieldByName ('b') ...
  ... FieldByName ('c') ...
  ... FieldByName ('d') ...
end;

там, где правильным будет

FieldA := Query.FieldByName ('a');
FieldB := Query.FieldByName ('b');
FieldC := Query.FieldByName ('c');
FieldD := Query.FieldByName ('d');
while not Query.Eof do
begin
  ... FieldA ...
  ... FieldB ...
  ... FieldC ...
  ... FieldD ...  
end;
7 янв 08, 22:29    [5124704]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
softwarer
andreymx
Конечно, у меня тоже есть положительный пример - копирование данных из датасета в массив - по индексу доступ намного быстрее, чем по имени.
Не думаю, что это положительный пример. Во-первых, сама по себе операция сомнительная, в клиенте такие редко нужны. Во-вторых, почти уверен, что у Вас что-то типа
while not Query.Eof do
begin
  ... FieldByName ('a') ...
end;

там, где правильным будет
FieldA := Query.FieldByName ('a');
Я ту пересмотрел тот свой код - действительно, нет ни FieldByName, ни доступа по индексу. Давно не смотрел...
У меня универсальная процедура выгрузки любого DataSet в Оракл посредством ArrayDML. Точно, никаких FieldByName там нет, а есть там, кроме "всякого разного",
var
    arrFields    : array of TField;
    ArrayDML     : array of array of variant;
begin
{...}
ArrayDML[i][curArrayDML] := arrFields[i].Value;

А обращение по индексу есть в другом месте - там, где я выгружаю оракловые данные в локальные парадокс-копии
    for i := 0 to iCount-1 do begin
        TableExport.Fields[i].Value := OracleQuery1.Field(i);
    end;
7 янв 08, 23:08    [5124779]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
stax..
Guest
softwarer
nihon
А подскажите ещё момент возможно ли указание номера столбца в select

Даже если бы было возможно, любой вменяемый руководитель разработки (архитектор, ведущий программист итп) отрывал бы за это руки. Указание номера столбца - хрень, которую и в order by не мешало бы выкинуть и сделать хорошо.

я смутно помню после праздников

но кажисть есть вариант когда отсортировать мона токо по номеру колонки,
по крайней мере мне не удавалось (повторить сегодня не смог, что то с union кажись)
.....
stax
8 янв 08, 13:29    [5125655]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
stax..
я смутно помню после праздников

но кажисть есть вариант когда отсортировать мона токо по номеру колонки,
по крайней мере мне не удавалось (повторить сегодня не смог, что то с union кажись)
Что-то и я такое помню - может, в 8-ке?
8 янв 08, 13:37    [5125672]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
Elic
Member

Откуда:
Сообщений: 29980
stax..
но кажисть есть вариант когда отсортировать мона токо по номеру колонки,
STFF ORDER BY 1
8 янв 08, 13:42    [5125694]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
stax..
Guest
Elic
stax..
но кажисть есть вариант когда отсортировать мона токо по номеру колонки,
STFF ORDER BY 1

Elic просмотрел, но код так и не увидел
кажись и с алиасами не смог по имени

зы
постараюсь припомнить

если чесно то я пользую по номеру колонки, не всегда но пользую
.....
stax
8 янв 08, 13:55    [5125728]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
Elic
Member

Откуда:
Сообщений: 29980
stax..
Elic просмотрел, но код так и не увидел
кажись и с алиасами не смог по имени
select dummy as c1 from dual
union all
select dummy as c2 from dual
order by c1;

C
-
X
X

2 rows selected.

Disconnected from Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
Похоже, ограничение осталось только в доке :)
8 янв 08, 14:06    [5125753]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1314
softwarer
nihon
А подскажите ещё момент возможно ли указание номера столбца в select

Даже если бы было возможно, любой вменяемый руководитель разработки (архитектор, ведущий программист итп) отрывал бы за это руки. Указание номера столбца - хрень, которую и в order by не мешало бы выкинуть и сделать хорошо.
+1
ЗЫ. Еще за звездочку надо расстреливать!
8 янв 08, 14:14    [5125764]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
oragraf
ЗЫ. Еще за звездочку надо расстреливать!

Не надо экстремизма.
Есть контексты, в которых "звездочка" уместна.
8 янв 08, 14:20    [5125771]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
oragraf
ЗЫ. Еще за звездочку надо расстреливать!
while <ещё есть плохие люди?> do begin
   <собрались все хорошие и расстреляли всех плохих>;
end;
8 янв 08, 14:24    [5125783]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63971
Блог
stax..
но кажисть есть вариант когда отсортировать мона токо по номеру колонки,

Вы говорите немного о другом... попробую поподробнее. По моим представлениям, синтаксис с сортировкой по номеру колонки появился в старых реализациях SQL - и через них в SQL92 - потому, что людям не хватило сортировки по имени колонки. Как только они обнаружили потребность сортировать по выражению, по функции в селекте итп - какой-то безответственный паразит придумал это угробище вместо того, чтобы сделать хорошо. Хорошо - это указание в ORDER BY алиаса колонки. При наличии такой фичи возможность сортировки по номеру представляется мне излишней и вредной. Но, к сожалению, из-за идиотских представлений о совместимости мы будем тянуть ее следующие две тысячи лет.

В Oracle, слава разработчикам, с синтаксисом order by все хорошо, практической необходимости или желательности сортировать по номеру.... не припомню, чтобы встречал. Если говорить о ссылке, которую привел Elic, то мало того, что она относится к весьма экзотическому и практически вряд ли применимому случаю - напомню

select *
union
select *
order by <some column>

но самое главное - я бы скорее назвал багом поведение в этом случае. Почему:

SQL> select * from dual order by dummy ;

DUMMY
-----
X

SQL> select dummy from dual
  2  union all
  3  select 'y' from dual
  4  order by dummy ;

DUMMY
-----
X
y

SQL> select * from dual
  2  union all
  3  select 'y' from dual
  4  order by dummy ;

select * from dual
union all
select 'y' from dual
order by dummy

ORA-00904: "DUMMY": invalid identifier

Что мы видим: случай 1 - имя колонки успешно проявляется из-под звездочки и видно в order by. Случай 2 - имя явно указанной колонки (не алиас! имя, ставшее алиасом) видно в order by. Случай 3 - суперпозиция этих случаев не срабатывает.
8 янв 08, 14:24    [5125784]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
softwarer
select * from dual
union all
select 'y' from dual
order by dummy

Мне следующий пример больше нравится )))
SELECT * FROM dual
UNION ALL
SELECT dummy FROM dual
ORDER BY dummy

ORA-00904: "DUMMY": invalid identifier
8 янв 08, 14:34    [5125800]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63971
Блог
andreymx
Мне следующий пример больше нравится

Эта логика мне представляется правильной. Выглядит, конечно, не лучшим образом, но альтернатива - хуже. Вот это:

SQL> select table_name from all_tables
  2  union all
  3  select column_name from all_tab_columns
  4  order by column_name ;

ORA-00904: "COLUMN_NAME": invalid identifier

мне нравится больше, чем если бы оно сработало :)
8 янв 08, 14:38    [5125813]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
stax..
Guest
softwarer

Вы говорите немного о другом...
....

нет, я ИМЕННО говорю о соротировке по номеру столбца
(протрезвею мож вспомню),
не смог я отсортировать, и звездочки не было

анти пример
неудобно для GROUP BY что нет по номеру столбца (нехай по алиасу, но неудобно),
я за то чтоб group by был по "номеру столбца",
и пусть меня растреляют даже с шестиствольного , кстати была отдельная ветка
.....
stax
8 янв 08, 16:06    [5126066]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63971
Блог
stax..
не смог я отсортировать, и звездочки не было

Не могу сказать. Не встречал и не очень представляю, как такого добиться.

stax..
неудобно для GROUP BY что нет по номеру столбца (нехай по алиасу, но неудобно)

Мне неудобно, что нет по алиасу. Что касается номера столбца - нет, в данном случае я уж лучше выкручусь. Ошибки в order by все же не столь часто приводят к действительно плохим последствиям, а вот испорченная группировка.....
8 янв 08, 16:15    [5126104]     Ответить | Цитировать Сообщить модератору
 Re: Помоему сложный запрос ORACLE  [new]
stax..
Guest
softwarer

Не могу сказать. Не встречал и не очень представляю, как такого добиться.

понимаю
но постараюсь
ps
я то и нописал с надеждой, что мож кто припомит
pss
еще раз, мож просто я не смог совладать со СВОИМ скл (и не своими вю)
.......
stax
8 янв 08, 17:42    [5126345]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить