SQL создает временную таблицу отображения в операторе выбора - PullRequest
0 голосов
/ 25 марта 2009

Я строю результаты, объединяя таблицы

select t1.*, t2.col2 from t1, t2 where t1.col1=t2.col1

Есть ли способ создать временную 'отображающую' таблицу 'inline' в операторе select для случаев, когда таблица t2 не существует?

Так что-то вроде

select t1.*, tempt2.col2 from t1, (<create temp table>) tempt2 where ...

Я использую Oracle

Ответы [ 5 ]

3 голосов
/ 25 марта 2009

Таблица с 1 строкой:

SELECT t1.*, t2.col2
FROM   t1,
       (
       SELECT  1 AS col2
       FROM    dual
       ) t2

Таблица с 0 строками:

SELECT t1.*, t2.col2
FROM   t1,
       (
       SELECT  1 AS col2
       FROM    dual
       WHERE   1 = 0
       ) t2

Таблица с N строками:

SELECT t1.*, t2.col2
FROM   t1,
       (
       SELECT  1 AS col2
       FROM    dual
       CONNECT BY
               level <= :N
       ) t2
2 голосов
/ 27 декабря 2015

Я знаю, что этот вопрос очень старый. Но чтобы закончить ответ, как насчет функции DECODE ()?

https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions040.htm#i1017437

SELECT product_id,
   DECODE (warehouse_id, 1, 'Southlake', 
                         2, 'San Francisco', 
                         3, 'New Jersey', 
                         4, 'Seattle',
                            'Non domestic') 
   "Location of inventory" FROM inventories
   WHERE product_id < 1775;

Пока таблица сопоставления достаточно короткая, это кажется довольно элегантным решением.

2 голосов
/ 25 марта 2009

Я не уверен, что это то, что вы ищете, но вы можете сделать несколько SELECT с UNION, чтобы получить производную таблицу

SELECT t1.*, t2.col2
FROM t1, (
    SELECT 1 as Id, 'Foo' as Col2
    UNION ALL
    SELECT 2 as Id, 'Bar' as Col2
    UNION ALL
    SELECT 3 as Id, 'FooBar' as Col2
) t2
WHERE
   t1.Id = t2.Id
0 голосов
/ 25 марта 2009

Я не совсем уверен, что вы здесь делаете.

Либо то, что вы хотите, это предложение WITH например,

WITH tempt2 AS 
  (SELECT x FROM y)
SELECT t1.*, tempt2.col2
FROM t1, tempt2
WHERE ...

Или, если вы используете один и тот же SQL на разных БД и не можете быть уверены, что таблица действительно существует, то вам, вероятно, лучше проверить ее наличие и реагировать по-разному.

Нужно ли использовать чистый SQL или вы можете использовать PL / SQL?

0 голосов
/ 25 марта 2009

Не знаю, работает ли он в Oracle, но вы ищете что-то вроде следующего псевдокода?

выберите t1. *, Tempt2.col2 из внутреннего соединения t1 (выберите col2, foo, bar из t2, где bar =?) Tempt2 в t1.foo = tempt2.foo где. , .

Полагаю, это не решает проблему, поскольку вы сказали, что table2 (t2) на самом деле не существует. Я не уверен, что у вас будет в вашей таблице сопоставления или где вы получите эти данные, если не из таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...