是否可以在连接查询中包含DUAL表?
任何人都可以给我一个包含双表SYSTIMESTAMP
的例子。
答案 0 :(得分:3)
一个常见用途(对我而言)是用它来使内联视图加入......
SELECT
filter.Title,
book.*
FROM
(
SELECT 'Red Riding Hood' AS title FROM dual
UNION ALL
SELECT 'Snow White' AS title FROM dual
)
AS filter
INNER JOIN
book
ON book.title = filter.title
[这是一个故意无关紧要的例子。]
答案 1 :(得分:1)
基本上你可以,但没有必要。
您可以将systimestamp伪列添加到您已有的任何查询中:
SELECT t.col1, t.col2, systimestamp
FROM your_table t
将提供与
相同的结果SELECT t.col1, t.col2, d.st
FROM your_table t, (select systimestamp st from dual) d
请注意,双表只有一行,因此cartessian产品不会向原始查询添加行。
答案 2 :(得分:0)
试试这个解决方案:
select (select SYSTIMESTAMP from dual ) as d
/*
Here you can add more columns from table tab
*/
from tab
答案 3 :(得分:0)
没有必要,DUAL
关键字是一种表示你不是在查询表格的方式,如果你想要将DUAL
与其他表“加入”,只需查询其他表,包括不是来自select子句中表的列。
编辑:正如评论所说,此声明是错误的, DUAL
是一个表。
我仍然认为包括(来自问题)
没有意义联接中的DUAL表
答案 4 :(得分:0)
您可以在 Oracle 中执行此操作。我在尝试解决类似问题时发现了这个问题。诀窍是将 DUAL
包装在子查询中,并返回一个您可以加入的静态值。
就我而言,我想在插入新记录之前查看表中是否存在满足某些条件的记录。如果它存在,我想要 ID
列。如果它不存在,我想从序列中获得一个新的 ID
值。我使用 DUAL
来“伪造”一个外连接,这样我总能得到一行。然后我使用 NVL()
返回一个序列值,如果结果为空。
SELECT NVL(v.ID, REAL_SEQUENCE.nextval)
FROM (SELECT 1 as match FROM DUAL) d,
(SELECT 1 as match, ID
FROM REAL_TABLE
WHERE CONDITION = CRITERIA) v
WHERE d.match = v.match(+)