7

是否可以在连接查询中包含 DUAL 表?

谁能给我一个例子,其中包括SYSTIMESTAMP来自双表。

4

5 回答 5

4

一种常见用途(对我而言)是使用它来制作内联视图以加入...

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

[这是一个故意琐碎的例子。]

于 2012-10-15T11:31:44.177 回答
2

基本上可以,但没必要。
您可以将 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

请注意,对偶表只有一行,因此笛卡尔积不会将行添加到您的原始查询中。

于 2012-10-15T11:48:28.927 回答
0

试试这个解决方案:

 select (select SYSTIMESTAMP from dual ) as d
        /*
           Here you can add more columns from table tab
        */ 
 from tab
于 2012-10-15T11:29:20.387 回答
0

应该没有必要,DUAL关键字是一种表示您没有查询表的方式,如果您想DUAL与另一个表“连接”,只需查询另一个表,包括您的列不是来自该表在选择子句中。

编辑:正如评论所说,这个陈述是错误的,DUAL是一个表。

我仍然认为包括(来自问题)没有意义

连接中的 DUAL 表

于 2012-10-15T11:34:54.763 回答
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(+)
于 2021-04-09T01:29:02.327 回答