是否可以在连接查询中包含 DUAL 表?
谁能给我一个例子,其中包括SYSTIMESTAMP
来自双表。
一种常见用途(对我而言)是使用它来制作内联视图以加入...
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
[这是一个故意琐碎的例子。]
基本上可以,但没必要。
您可以将 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
请注意,对偶表只有一行,因此笛卡尔积不会将行添加到您的原始查询中。
试试这个解决方案:
select (select SYSTIMESTAMP from dual ) as d
/*
Here you can add more columns from table tab
*/
from tab
应该没有必要,DUAL
关键字是一种表示您没有查询表的方式,如果您想DUAL
与另一个表“连接”,只需查询另一个表,包括您的列不是来自该表在选择子句中。
编辑:正如评论所说,这个陈述是错误的,DUAL
是一个表。
我仍然认为包括(来自问题)没有意义
连接中的 DUAL 表
您可以在 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(+)