如果表表达式查询为空,则查询结果为空

时间:2016-09-28 12:02:45

标签: sql oracle

我需要运行类似这样的查询

SELECT kk.first_col, ll.second_col
  FROM (SELECT 2 first_col FROM dual) kk,
       (SELECT 1 second_col FROM dual WHERE 1 = 2) ll

其中一个表表达式可能返回值。 在此示例中,kk会返回行但ll不会(因为显而易见的原因)。 因此,如果我运行整个查询,我会返回0行。 我的期望是得到这样的结果:

|FIRST_COL|SECOND_COL|
|2        |          |

有可能吗?

3 个答案:

答案 0 :(得分:2)

您的查询几乎没问题,即使第二个表上没有找到数据,您也只需要从第一个表中返回数据。

在SQL中,此作业由LEFT JOIN完成。试试这个:

SELECT 
  kk.first_col, 
  ll.second_col
FROM (SELECT 2 first_col FROM dual) kk
LEFT JOIN (SELECT 1 second_col FROM dual WHERE 1 = 2) ll ON 1=1
;

答案 1 :(得分:1)

首先,不要在from子句中使用逗号。

对于此特定查询,您似乎想要一行包含两列。只需使用两个标量子查询:

SELECT (SELECT 2 first_col FROM dual) as first_col,
       (SELECT 1 second_col FROM dual WHERE 1 = 2) second_col
FROM dual;

答案 2 :(得分:1)

您必须加入2个表:

SELECT kk.first_col, ll.second_col
  FROM (SELECT 2 first_col FROM dual) kk
  FULL OUTER JOIN (SELECT 1 second_col FROM dual WHERE 1 = 2) ll ON kk.firstcol = ll.secondcol

Oracle建议不要根据https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries006.htm

使用oracle-join-syntax

请注意,oracle最大10g的大桌子上的外部连接速度很慢,自11g以来速度更快