首页 > 解决方案 > BO SQL 查询:LEFT JOIN

问题描述

我正在尝试显示表 A 中的表 B 的 ID,并为表 A 中没有 ID 的表 B 的 ID 显示 null。

此查询在 sql developer 下可以正常工作:

SELECT a.file_name, a.DATE, a.ID, a.number_line, 
       b.file_name, b.DATE, b.ID, b.number_line
FROM TABLE a LEFT JOIN
     TABLE b
     ON a.ID = b.ID AND
        b.file_name LIKE 'EEEEEE%' AND
        b.DATE BETWEEN '2019-10-01' AND '2020-01-01'
WHERE a.file_name LIKE 'RRRRRR%';

但是它在业务对象下不起作用的问题,该软件建议以这种方式编写请求,并且它只显示表 B 中的行,其中包含表 A 中的 ID 而不是空值:

SELECT a.file_name, a.DATE, a.ID, a.number_line,
 b.file_name, b.DATE, b.ID, b.number_line 
 FROM TABLE a, TABLE b 
 WHERE ( a.id(+)=b.id ) AND 
 ( a.file_name LIKE 'RRRRRR%' AND b.DATE BETWEEN '2019-10-01' 
 AND '2020-01-01' AND b.file_name LIKE 'EEEEEE%');

如何翻译这个请求?

标签: sql

解决方案


如果问题是LEFT JOIN条件不等式,您可以使用子查询:

SELECT a.file_name, a.DATE, a.ID, a.number_line, 
       b.file_name, b.DATE, b.ID, b.number_line
FROM TABLE a LEFT JOIN
     (SELECT b.*
      FROM TABLE b
      WHERE b.file_name LIKE 'EEEEEE%' AND
            b.DATE BETWEEN '2019-10-01' AND '2020-01-01'
     ) b
     ON a.ID = b.ID       
WHERE a.file_name LIKE 'RRRRRR%';

如果您必须使用这种古老的语法,您也可以使用子查询来应用它。


推荐阅读