Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2015, 09:39   #1
Devian21
 
Регистрация: 06.05.2009
Сообщений: 5
По умолчанию Join таблицы с уже выбраннымм множеством (sql)

Добрый день.
Подскажите пожалуйста синтаксис для объединения таблицы с уже объединенным массивом в sql.
Например:
есть join с парой фильтров:

Код:
select *
  from ew_payment t
  join ew_request r
    on t.pay_id = r.pay_id
 where t.operator_id = 121
   and trunc(t.pay_dt) = to_date('15.06.2015', 'dd.mm.yyyy')
   and r.status_id=0
Теперь его, надо join'ить с еще одной таблицей, как это возможно сделать? Там вроде как-то можно назвать множество, а дальше уже указывать ключи для joinа, но точного синтаксиса я не знаю

Последний раз редактировалось Stilet; 27.07.2015 в 11:55.
Devian21 вне форума Ответить с цитированием
Старый 27.07.2015, 10:31   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

а почему НЕ сделать просто
Код:
select *
from ew_payment t
join ew_request r
on t.pay_id = r.pay_id
JOIN OTHERTABLE x ON x.zzz =r.xxx -- надо join'ить с еще одной таблицей,
where t.operator_id = 121
and trunc(t.pay_dt) = to_date('15.06.2015', 'dd.mm.yyyy')
and r.status_id=0
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 27.07.2015 в 10:33.
evg_m вне форума Ответить с цитированием
Старый 27.07.2015, 12:08   #3
Devian21
 
Регистрация: 06.05.2009
Сообщений: 5
По умолчанию

Ну это вариант конечно, но хотелось бы увидеть вариант именно с именованием множества и последующим join'ом. Пример, который я привел простой, но когда бывает надо соединить 2 уже соединенных подмножества без того, о чем я спрашиваю - никак.
Devian21 вне форума Ответить с цитированием
Старый 27.07.2015, 14:36   #4
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Цитата:
Сообщение от Devian21 Посмотреть сообщение
Пример, который я привел простой, но когда бывает надо соединить 2 уже соединенных подмножества без того, о чем я спрашиваю - никак.
Уже сформированное множество пихать во from в скобках, а далее join или таблица через запятую, и выражение объединения в where:
Код:
select *
from
  (<my select>) a
join
  b
on
  a.x = b.y;

-- или 

select *
from
  (<my select>) a,
  b
where
  a.x = b.y;
В нормальных серверах обе записи эквиваленты. Единственное, в подзапросе поля лучше указывать поименно, а то через звездочку будет куча одинаковых, и они автоматом получат имена поле_1, поле_2 случайным образом. Имена таблиц подзапроса снаружи не видны.
Vapaamies вне форума Ответить с цитированием
Старый 27.07.2015, 14:40   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
именно с именованием множества
Create View ??
НО это делается не в каждом запросе, а ЗАРАНЕЕ, на этапе ПРОЕКТИРОВАНИЯ БАЗЫ !!!

Код:
CREATE VIEW TPORGAN (
  ID_ORGAN,
  TPORG
)
AS
  select organ.id as id_organ, case when id_organ is NULL then 0 when   CENTR.DEF_CENTR=1 then 2 else 1 end as tporg
  from organ
  left join Centr on id_organ =organ.id
;
Код:
select *
from organ
left join tporgan on organ.id =tporgan.id_organ
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 27.07.2015, 15:08   #6
Devian21
 
Регистрация: 06.05.2009
Сообщений: 5
По умолчанию

Попробовал на своей задаче - работает. Стало сильно проще.
Вьюха - это круто (есть у нас в базе несколько готовых), но я спрашивал именно про случаи, когда надо много объединений.
Всем спасибо!
Devian21 вне форума Ответить с цитированием
Старый 29.07.2015, 15:54   #7
Devian21
 
Регистрация: 06.05.2009
Сообщений: 5
По умолчанию

Снова need HELP!!!!
Оракля ругается следующим образом: ошибочно число или типы аргументов при обращении к 'V'.

Код:
select q.pay_id, v.DD
  from ew_payment q
  join (select distinct (e.field_st) as DD
          from ew_payment_information e
         where e.payment_id in
               (select t.payment_id
                  from ew_payment t
                 where t.operator_id = 301
                   and trunc(t.pay_dt) = to_date('01.06.2015', 'dd.mm.yyyy')
                   and t.processed not in (6, 9, 10, 102))
           and e.field_id = 502
           and e.field_st not like 'СНТ%'
           and e.field_st not like '%ООО%'
           and e.field_st not like '%Абонент%'
           and e.field_st not like 'ПОТР%'
           and e.field_st not like 'ВЛАДЕ%'
           and e.field_st not like 'Собствен%'
           and e.field_st not like 'Мест. прав%'
           and e.field_st not like 'Подвал%'
           and e.field_st not like 'Садовое%'
           and e.field_st not like 'ГСК%') v
    on q.payment_information=v.payment_information
В чем косяк, подскажите пожалуйста?
З.Ы. есть подозрение, что проблема в том, что поле, по которому идет джойн является CLOB'ом и содержит пачку field'ов, а джойнится с таким же полем, но содержащим уже один field под номером 502. Т.к. я написал аналогичный запрос (по синтаксису) все работало.

Последний раз редактировалось Devian21; 29.07.2015 в 16:34.
Devian21 вне форума Ответить с цитированием
Старый 30.07.2015, 13:03   #8
Akeloya
Форумчанин
 
Регистрация: 27.01.2014
Сообщений: 115
По умолчанию

вы выбираете
Код:
select distinct (e.field_st) as DD
(выборка обрамленная круглыми скобками)
обзываете выборку v (смотрите выше что вы выбрали) и пытаетесь обратиться к v.payment_information который не выбирали и удивляетесь в чем же ошибка?

тогда уж
Код:
 select distinct (e.field_st) as DD, payment_information
нужно выбирать.
Akeloya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL использование JOIN LEFT не дает нужного результата Yuran БД в Delphi 2 12.04.2015 11:49
Можно ли использовать CURSOR для уже существующей таблицы? Bizunov SQL, базы данных 2 30.05.2013 16:07
inner join/full join SashkaSonin БД в Delphi 6 23.03.2012 17:13
MS SQL Server: назначение автосчетчика полю уже существующей таблицы Blondy SQL, базы данных 13 08.10.2011 23:33
join в sql tsergey Помощь студентам 1 12.02.2009 13:10