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

时间:2012-10-15 11:27:48

标签: sql oracle

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

任何人都可以给我一个包含双表SYSTIMESTAMP的例子。

5 个答案:

答案 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(+)