Объединение псевдонимов таблиц с «где» в Informix - PullRequest
1 голос
/ 23 февраля 2011

У меня серьезные проблемы с использованием псевдонимов таблиц в Informix с частью where.

Так что я могу запустить:

SELECT ColA, ColB 
  FROM Table1 AS TestTable

Но как только я попробую это:

SELECT ColA, ColB 
  FROM Table1 
 WHERE type = 'A' AS TestTable

.. это не сработает. То же самое происходит, когда я пытаюсь объединить таблицы с частью WHERE.

Я пытаюсь оптимизировать запрос из этого Вопроса , поэтому я стараюсь не работать с временными таблицами.

Ответы [ 3 ]

2 голосов
/ 23 февраля 2011

Полагаю, вы пытаетесь получить эквивалент встроенных представлений Oracle.Синтаксис:

select *
from  
   TABLE(MULTISET(SELECT ColA, ColB 
  FROM Table1 
 WHERE type = 'A' )) T1
join 
   TABLE(MULTISET(SELECT ColA, ColB 
  FROM Table2 
 WHERE type = 'Z' )) T2 on (t2.colA = t1.colA)
1 голос
/ 17 октября 2012

Вы можете создать псевдоним столбцов в списке выбора или таблицах (или подзапросах) в предложении FROM.

Поэтому вы должны написать:

SELECT ColA, ColB 
  FROM Table1 AS TestTable
 WHERE type = 'A'

или вы 'd write:

SELECT t.*, r.*
  FROM (SELECT ColA, ColB 
          FROM Table1 AS TestTable
         WHERE type = 'A'
       ) AS t
  JOIN AnotherTable AS r ON t.ColA = r.ColC

Обратите внимание, что в этом запросе имя TestTable фактически не используется.Более сложный подзапрос вполне может использовать псевдоним (хотя я настоятельно рекомендую использовать короткие псевдонимы - псевдонимы, которые короче псевдонимов таблиц).

0 голосов
/ 23 февраля 2011

Насколько я знаю, попытка использовать псевдоним в предложении Where недопустима ни в одной системе баз данных. Вы можете поместить результаты оператора Select в таблицу, используя Select ... Into, например:

Select ColA, ColB Into Table2
From Table1 As TestTable

Однако затем вам нужно будет использовать отдельный оператор SQL, чтобы использовать Table2 в приведенном выше примере. Другой вариант - использовать выражение общей таблицы, которое, как мне кажется, поддерживается Informix:

With Foo As
    (
    Select ColA, ColB
    From Table1 As TestTable
    )
Select ColA, ColB
From Foo
...