Sql 如何将这行代码更改为WHERE子句?

Sql 如何将这行代码更改为WHERE子句?,sql,oracle,Sql,Oracle,我在Oracle SQL中有以下代码行: LEFT OUTER JOIN lrmi_dba.rte_session_info si ON si.rte_session_id = TO_CHAR(USERENV('SESSIONID')) 我想将这部分代码更改为WHERE子句,类似于: LEFT OUTER JOIN lrmi_dba.rte_session_info si ON si.rte_session_id WHERE si.rte_sessio

我在Oracle SQL中有以下代码行:

LEFT OUTER JOIN lrmi_dba.rte_session_info si
          ON si.rte_session_id = TO_CHAR(USERENV('SESSIONID'))
我想将这部分代码更改为WHERE子句,类似于:

LEFT OUTER JOIN lrmi_dba.rte_session_info si
          ON si.rte_session_id 
WHERE si.rte_session_id = TO_CHAR(USERENV('SESSIONID'))
这是行不通的。有人知道怎么做吗


谢谢大家!

必须使用具有相同值的列(主要是键列)将表连接到另一个表

样品

 FROM abcd.table1 t1
 LEFT OUTER JOIN lrmi_dba.rte_session_info si
   ON si.rte_session_id = t1.session_id
WHERE si.rte_session_id = TO_CHAR(USERENV('SESSIONID'))

必须使用具有相同值的列(主要是键列)将表连接到另一个表

样品

 FROM abcd.table1 t1
 LEFT OUTER JOIN lrmi_dba.rte_session_info si
   ON si.rte_session_id = t1.session_id
WHERE si.rte_session_id = TO_CHAR(USERENV('SESSIONID'))

如果使用
WHERE
子句,则将外部联接转换为内部联接。因此,把它放在
ON
子句中:

 LEFT OUTER JOIN
 lrmi_dba.rte_session_info si
 ON si.rte_session_id AND
    si.rte_session_id = TO_CHAR(USERENV('SESSIONID'))

代码就是这样开始的。将条件保留在
ON
子句中。

如果使用
WHERE
子句,则会将外部联接转换为内部联接。因此,把它放在
ON
子句中:

 LEFT OUTER JOIN
 lrmi_dba.rte_session_info si
 ON si.rte_session_id AND
    si.rte_session_id = TO_CHAR(USERENV('SESSIONID'))

代码就是这样开始的。将该条件保留在
ON
子句中。

也许您可以使用
使用

LEFT OUTER JOIN lrmi_dba.rte_session_info si
  USING (rte_session_id)
WHERE si.rte_session_id = TO_CHAR(USERENV('SESSIONID'))
这假定您要加入的表
lrmi\u dba.rte\u session\u info
也有一个名为
rte\u session\u id
的列


祝你好运。

也许你可以使用
使用

LEFT OUTER JOIN lrmi_dba.rte_session_info si
  USING (rte_session_id)
WHERE si.rte_session_id = TO_CHAR(USERENV('SESSIONID'))
这假定您要加入的表
lrmi\u dba.rte\u session\u info
也有一个名为
rte\u session\u id
的列

祝你好运。

你可以这样尝试:

LEFT OUTER JOIN lrmi_dba.rte_session_info si
      ON si.rte_session_id = si.rte_session_id WHERE si.rte_session_id = TO_CHAR(USERENV('SESSIONID'))
您可以这样尝试:

LEFT OUTER JOIN lrmi_dba.rte_session_info si
      ON si.rte_session_id = si.rte_session_id WHERE si.rte_session_id = TO_CHAR(USERENV('SESSIONID'))

您可以使用:“LEFT OUTER JOIN lrmi_dba.rte_session_info si ON 1=1,其中si.rte_session_id=TO_CHAR(USERENV('SESSIONID'))”。但是为什么呢?您在
ON
子句中写入的过滤条件将从左表中获取
所有
结果,并且仅从
lrmi_dba.rte_session_info
表中获取匹配结果,而该表又与传递的
session_id
匹配。但是,当您说要将条件移动到where子句时,这意味着首先从
rte_session_id
相等的两个表中获取所有结果,然后最后仅获取传递的session_id匹配的结果。。具体要求是什么..简而言之,这些查询是不同的,因为
NULL
。有效地
左外连接lrmi_dba.rte_session_info si。。其中si.rte_session_id=..
是一个内部联接。我不确定您将联接子句放在WHERE子句中的意图是什么(尽管您目前的查询实际上并不是按照
上的
的意图将两个表“联接”在一起),但这个问题可能是一个有趣的阅读:您可以使用:“左外连接lrmi_dba.rte_session_info si ON 1=1,其中si.rte_session_id=TO_CHAR(USERENV('SESSIONID'))“。但是为什么呢?您在
子句的
中写入的筛选条件将从左表中获取
所有
结果,并且仅从
lrmi_dba.rte_session_info
表中获取匹配结果,而该表又与传递的
session_id
相匹配。”。但是,当您说要将条件移动到where子句时,这意味着首先从
rte_session_id
相等的两个表中获取所有结果,然后最后仅获取传递的session_id匹配的结果。。具体要求是什么..简而言之,这些查询是不同的,因为
NULL
。有效地
左外连接lrmi_dba.rte_session_info si。。其中si.rte_session_id=..
是一个内部联接。我不确定您将联接子句放在WHERE子句中的意图是什么(尽管您目前的查询实际上并不是按照
上的
的意图将两个表“联接”在一起),但这个问题可能是一个有趣的阅读: