условие в from (в одном случае использовать таблицу 1 в другом таблицу 2)

Legushka
Дата: 14.02.2015 21:14:46
взвините за новую тему, если такое уже было, но поиск по самым используемым словам выдал 100500 результатов

поставили условие что бы я во временную таблицу набрал все используемые значения

было так:
select tab3.* from tab1 left join tab3 on tab3.poleA=tab1.poleID
union
select tab3.* from tab2 left join tab3 on tab3.poleA=tab2.poleID
просят так:
select tab3.* from ??? left join tab3 on  (tab3.poleA in (tab1.poleID,tab2.poleID)) 
такое возможно в постгресе?
/\/\/\/\/\/\
Дата: 14.02.2015 21:33:49
Legushka,

Нет, не возможен:
Нет синтаксиса ???

Рассмотрите такой вариант:

SELECT 
  *
FROM tab3
WHERE EXISTS (SELECT 1 FROM tab1 WHERE tab1.poleID = tab3.poleA)
   OR EXISTS (SELECT 1 FROM tab2 WHERE tab2.poleID = tab3.poleA)


Вариант не эквивалентен представленным Вами. Но на фоне величайшей прекрасности по глубине безумия предыдущих запросов вполне подойдет.

Надеюсь, индексы по tab3.poleA, tab1.poleID, tab2.poleID у Вас есть.
Legushka
Дата: 14.02.2015 21:39:08
автор
Но на фоне величайшей прекрасности по глубине безумия
))))
на самом деле я пытался упростить настоящий пример, а там и не такое

/\/\/\/\/\/\, спасибо большое за ваш пример-)
кхм
Дата: 15.02.2015 06:39:09
Legushka
автор
Но на фоне величайшей прекрасности по глубине безумия
))))
на самом деле я пытался упростить настоящий пример, а там и не такое

/\/\/\/\/\/\, спасибо большое за ваш пример-)

не надо пытаться
надо делать

бред не может быть прост -- он просто бред
приведите что-то, пусть сложное, но не бредовое



и да -- не надо делать, "чё просят"
надо делать то, что надо


т.е. приведите ваш запрос без ваших попыток переврать, сообщите, что не нравится, и что вы пытаетесь изобразить -- начнём думать


а бредить всяко можно, например так

select tab3.* 
from tab3
join 
( select poleID FROM tab1 
union 
select poleID  from tab2
) FOO
on tab3.poleA=FOO.poleID


-- запрос ничему не эквивалентен, но всяко на "все используемые значения" похож