sql - 如何使用带有过滤条件where子句的oracle外连接

标签 sql oracle11g outer-join

如果我写一个SQL:

select * 
from a,b 
where     a.id=b.id(+) 
      and b.val="test"

我想从a中的所有记录都不存在,或者b中存在对应的记录,或者它与val =“test”一起存在,这是正确的查询吗?

最佳答案

使用ANSI语法会更好

SELECT *
  FROM a
       LEFT OUTER JOIN b ON( a.id = b.id and
                             b.val = 'test' )

您也可以使用Oracle的语法执行相同的操作,但是会产生一些提示
SELECT *
  FROM a, 
       b
 WHERE a.id = b.id(+)
   AND b.val(+) = 'test'

请注意,在两种情况下,由于您未指定连接条件,因此我忽略了c表。我假设您并不是真的想将A加入B,然后再使用C生成笛卡尔积。

关于sql - 如何使用带有过滤条件where子句的oracle外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18390588/

相关文章:

tsql - 我们如何使用旧语法进行 LEFT JOIN?

oracle - 如何在Windows 10机器中重新启动oracle 11g数据库

python - libclntsh.so.12.1 的 CX_Oracle 导入错误

mysql - 在 MySQL 中创建带有右手约束的左外连接

ruby - 对两个 Ruby 数组执行外连接

java - 在 Oracle 中设置时间戳

用于解决数据库中的传递依赖项的 SQL 查询

SQL 字符串用逗号和空格分割

mysql - SQL:AND/OR 语句序列

sql - 使用 SQL 垂直展开表