我正在通过加入表来构建结果
select t1.*, t2.col2 from t1, t2 where t1.col1=t2.col1
有没有办法在select语句中为t2表不存在的实例创建临时'mapping'表'inline'?
类似
select t1.*, tempt2.col2 from t1, (<create temp table>) tempt2 where ...
我正在使用Oracle
答案 0 :(得分:3)
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
答案 1 :(得分:2)
我不确定这是你在找什么,但你可以用UNION做多个SELECT来获得派生表
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
答案 2 :(得分:2)
我知道这个问题很老了。但只是为了完成答案,那么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;
只要映射表相当短,这似乎是一个非常优雅的解决方案。
答案 3 :(得分:0)
不知道它是否适用于Oracle,但您是否正在寻找类似下面的伪代码?
从t1内连接中选择t1。*,tempt2.col2(从t2中选择col2,foo,bar,其中bar =?)tempt2 on t1.foo = tempt2.foo where。 。
我想这并没有真正解决问题,因为你说table2(t2)并不存在。我不确定你在映射表中有什么,或者如果不是从表中获取数据的话。
答案 4 :(得分:0)
我不完全确定你在这里得到什么。
你想要的是WITH clause例如
WITH tempt2 AS
(SELECT x FROM y)
SELECT t1.*, tempt2.col2
FROM t1, tempt2
WHERE ...
否则,如果您在不同的数据库上运行相同的SQL并且无法确定该表是否确实存在,那么您可能更好地测试其存在并做出不同的反应。
是否需要纯SQL或者您是否可以使用PL / SQL?