Sql 奇怪的选择行为:Join起作用,where子句不起作用-为什么和从何时开始?
我经历了一种奇怪的行为,我已经在考虑找一个合适的心理医生。有人能解释一下这个吗 此选择返回我想要的:Sql 奇怪的选择行为:Join起作用,where子句不起作用-为什么和从何时开始?,sql,join,select,where-clause,abap,Sql,Join,Select,Where Clause,Abap,我经历了一种奇怪的行为,我已经在考虑找一个合适的心理医生。有人能解释一下这个吗 此选择返回我想要的: SELECT struc~node,struc~tree_level,struc~parent, strut~ltext, mar~matnr, mar~mtart, mar~matkl, mtx~maktx FROM wrf_matgrp_struc AS struc LEFT OUTER JOIN wrf_m
SELECT struc~node,struc~tree_level,struc~parent,
strut~ltext,
mar~matnr, mar~mtart, mar~matkl,
mtx~maktx
FROM wrf_matgrp_struc AS struc
LEFT OUTER JOIN wrf_matgrp_strct AS strut
ON strut~hier_id = struc~hier_id
AND strut~node = struc~node
LEFT OUTER JOIN wrf_matgrp_sku AS sku
ON sku~hier_id = struc~hier_id
AND sku~node = struc~node
LEFT OUTER JOIN mara AS mar
ON mar~matnr = sku~matnr
LEFT OUTER JOIN maw1 AS maw
ON maw~matnr = mar~matnr
LEFT OUTER JOIN makt AS mtx
ON mtx~matnr = mar~matnr
AND mtx~spras = strut~spras
INTO TABLE @lt_result_tab
WHERE struc~hier_id = @gs_act_hier-hier_id
AND struc~node IN @grt_node
AND struc~date_from <= @sy-datum
AND struc~date_to >= @sy-datum
AND strut~spras = @sy-langu
AND mar~matnr IN @grt_matnr
AND mar~matkl IN @grt_matkl
AND maw~wekgr IN @grt_wekgr
选择struc~节点、struc~树\级别、struc~父级、,
支柱~ltext,
马尔~matnr,马尔~mtart,马尔~matkl,
mtx~maktx
从wrf_matgrp_struc作为struc
作为支柱的左侧外部连接wrf_matgrp_strct
在支柱上~hier_id=struc~hier_id
和支柱节点=支柱节点
左外连接wrf_matgrp_sku作为sku
在sku~hier\u id=struc~hier\u id上
而sku~节点=结构节点
左外侧连接mara AS mar
年月日~matnr=sku~matnr
左外连接maw1为maw
在maw~matnr=mar~matnr上
左外连接标记为mtx
在mtx~matnr=mar~matnr上
mtx~spras=支柱~spras
进入表格@lt\u结果\u选项卡
其中struc~hier\u id=@gs\u act\u hier-hier\u id
和@grt_节点中的struc~节点
和struc~date_from=@sy datum
和支柱~spras=@sy langu
以及@grt_matnr中的mar~matnr
以及@grt_matkl中的mar~matkl
以及@grt_wekgr中的maw~wekgr
我移除连接和mtx~spras=strub~spras,并将其放置在类似这样的where条件下,但它无法按预期工作(结果集不完整)
选择struc~节点、struc~树\级别、struc~父级、,
支柱~ltext,
马尔~matnr,马尔~mtart,马尔~matkl,
mtx~maktx
从wrf_matgrp_struc作为struc
作为支柱的左侧外部连接wrf_matgrp_strct
在支柱上~hier_id=struc~hier_id
和支柱节点=支柱节点
左外连接wrf_matgrp_sku作为sku
在sku~hier\u id=struc~hier\u id上
而sku~节点=结构节点
左外侧连接mara AS mar
年月日~matnr=sku~matnr
左外连接maw1为maw
在maw~matnr=mar~matnr上
左外连接标记为mtx
在mtx~matnr=mar~matnr上
进入表格@lt\u结果\u选项卡
其中struc~hier\u id=@gs\u act\u hier-hier\u id
和@grt_节点中的struc~节点
和struc~date_from=@sy datum
和支柱~spras=@sy langu
以及@grt_matnr中的mar~matnr
以及@grt_matkl中的mar~matkl
以及@grt_wekgr中的maw~wekgr
和mtx~spras=@sy langu。
通过将比较移到where
子句,您已经将左连接
变成了内部连接
等待,这是真的吗?外部联接=如果您找到一些条目,应用where子句,否则返回原位。如果您使用的是旧系统,它会告诉您“您无法将来自左联接的字段放入where子句”。。。我想您的SQLs也是如此:(正如您已经看到的,这是一个新的。我知道对旧系统的限制,因此我非常满意,他们扩展了where条件。可能是
SELECT struc~node,struc~tree_level,struc~parent,
strut~ltext,
mar~matnr, mar~mtart, mar~matkl,
mtx~maktx
FROM wrf_matgrp_struc AS struc
LEFT OUTER JOIN wrf_matgrp_strct AS strut
ON strut~hier_id = struc~hier_id
AND strut~node = struc~node
LEFT OUTER JOIN wrf_matgrp_sku AS sku
ON sku~hier_id = struc~hier_id
AND sku~node = struc~node
LEFT OUTER JOIN mara AS mar
ON mar~matnr = sku~matnr
LEFT OUTER JOIN maw1 AS maw
ON maw~matnr = mar~matnr
LEFT OUTER JOIN makt AS mtx
ON mtx~matnr = mar~matnr
INTO TABLE @lt_result_tab
WHERE struc~hier_id = @gs_act_hier-hier_id
AND struc~node IN @grt_node
AND struc~date_from <= @sy-datum
AND struc~date_to >= @sy-datum
AND strut~spras = @sy-langu
AND mar~matnr IN @grt_matnr
AND mar~matkl IN @grt_matkl
AND maw~wekgr IN @grt_wekgr
AND mtx~spras = @sy-langu.