在下面的查询中,条件
and r.master_seq=206
Run Code Online (Sandbox Code Playgroud)
在 on 子句上用作连接条件。在程序代码中,值r.master_seq由参数设置。
我担心的是,我不确定将这种条件(r=.master_seq=123,我认为应该是 where 条件)混合到连接条件中是否可以。
我在想我应该只在 join 子句中使用关系信息(主键和外键),而不是 where 条件( where id=123, balance>300 等)。
SELECT
*
FROM
TB_REQUEST_DATA D
left outer join
TB_SPOT_REPORT_REQUEST r
on D.SEQ = r.REQUEST_SEQ
and r.master_seq=206
WHERE
d.SEQ IN (
7,12,5,11,4
)
desc tb_request_data;
Name Null Type
------------- -------- -------------
SEQ NOT NULL NUMBER
REQUEST_NM NOT NULL VARCHAR2(50)
REG_DT NOT NULL DATE
REG_ID NOT NULL VARCHAR2(20)
UP_DT NOT NULL DATE
UP_ID NOT NULL VARCHAR2(20)
DISASTER_TYPE VARCHAR2(500)
desc TB_SPOT_REPORT_REQUEST;
Name Null Type
------------ -------- -------------
MASTER_SEQ NOT NULL NUMBER
SEQ NOT NULL NUMBER
REQUEST_SEQ NOT NULL NUMBER
REAL_FILE_NM VARCHAR2(100)
DOWN_FILE_NM VARCHAR2(100)
Run Code Online (Sandbox Code Playgroud)
在WHERE子句中放置条件和ON子句是两件非常不同的事情。该ON条款是JOIN. 现在使用 ,INNER JOIN您不会看到输出有任何差异(除非也使用GROUP BY ALL)。但是,这OUTER JOIN是一个不同的故事。如果您将该特定条件移动到WHERE子句中,它实际上会(除其他外)否定OUTER您的查询部分。
我写了一篇文章,这里有几个例子。
请记住,该ON子句将两个表连接在一起。该WHERE子句从输出中排除行。对于您的具体示例,假设您有一行 inTB_REQUEST_DATA没有匹配TB_SPOT_REPORT_REQUEST。随着在r.master_seq = 206ON的条款 OUTER JOIN,你会得到与返回值的行TB_REQUEST_DATA,但NULLs在TB_SPOT_REPORT_REQUEST列。另一方面,如果您将它放在WHERE子句中,它将完全消除该行。
然而,假设您想要每一行,TB_REQUEST_DATA但只需要TB_SPOT_REPORT_REQUESTmaster_seq = 206 AND SEQ = REQUEST_SEQ 中的信息。这就是你将条件放入ON子句的时候。
| 归档时间: |
|
| 查看次数: |
699 次 |
| 最近记录: |