我需要运行类似这样的查询
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 | |
有可能吗?
答案 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以来速度更快