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

Sql 如果表表达式查询为空,则查询结果为空,sql,oracle,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

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

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        |          |

可能吗?

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

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

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

您必须联接两个表:

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建议不使用Oracle连接语法,请参见


请注意,在oracle高达10g的大型表上,完全外部联接速度较慢,因为11g更快。您的查询几乎可以,即使在第二个表上找不到数据,您也只需要从第一个表返回数据

在SQL中,这项工作是通过
左连接完成的。试试这个:

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
;

我删除了mysql标记,因为语法看起来像Oracle。您使用了1=2条件,该条件始终为false。这意味着“ll”不包含任何记录,将其与“kk”连接将导致获取0条记录。在
FROM
子句中的子查询将生成两个派生表,第一个表有一行,第二个表有零行。将N个表放入由
分隔的
FROM
子句中,
交叉联接
具有相同的效果,交叉联接是
内部联接
,其中
位于1=1
。。。因为它将跨越所有行,一x零=零行…您需要在Oracle中用逗号分隔表您的问题不完整。如果两个查询返回相同的值,人们无法理解您想要得到什么。您希望为该(左/内/全联接)或所有(交叉联接)的乘积获取一行。还有,你试过什么?如果我试着运行你的查询,我得到ORA-01468我得到now@swe:请删除别名“kk”后的“,”。连接条件中的列名也是错误的。使用ANSI join时的主要问题是,在连接条件中不需要使用(+)。@hemalp108 Thx,如果复制并粘贴,这就是问题所在。。。按建议编辑。oracle中的from子句中需要逗号