如何在多表中选择WHERE EXISTS ?

  • 本文关键字:选择 WHERE EXISTS sql abap
  • 更新时间 :
  • 英文 :


我有3个表:

  • /test/table1:
    • 列:doc_id,anotherID,value1
  • /test/table2:
    • Columns:anotherID,value1
  • /test/table3
    • Columns:doc_id,value2

我想选择/test/table1的数据,有两个条件。/test/table2有一个条件,/test/table3有一个条件。

我在一个表中选择数据,条件如下:

SELECT doc_id, anotherID FROM /test/table1 AS d 
INTO CORRESPONDING FIELDS OF TABLE @ct_document
WHERE EXISTS ( SELECT * FROM /test/table2 AS a 
WHERE value1 < @iv_value1 AND a~value1 = d~value1_id ).

它按照我的期望选择内容。但是现在我想添加一个条件,只选择这个数据,但只选择where /test/table3~value2 = 2

要做到这一点,我做:

SELECT doc_id, anotherID FROM /test/table1 AS d 
INTO CORRESPONDING FIELDS OF TABLE @ct_document
WHERE EXISTS ( SELECT * FROM /test/table2 AS a 
WHERE value1 < @iv_value1 AND a~value1 = d~value1_id ) 
AND EXISTS ( SELECT * FROM /test/table3 AS e 
WHERE e~value2 = 2 ).

当我这样做的时候,我有和以前一样的内容…它不满足我的第二个条件。

我有什么不明白的吗?

无论表/test/table1的内容如何,如果/test/table3中至少有一行包含e~value2 = 2,则条件EXISTS ( SELECT * FROM /test/table3 AS e WHERE e~value2 = 2 )总是被求值为TRUE。

要使其根据/test/table1(别名d)计算为TRUE或FALSE,您应该添加条件AND e~doc_id = d~doc_id,如下所示:

...
AND EXISTS ( SELECT * FROM /test/table3 AS e 
WHERE e~value2 = 2 AND e~doc_id = d~doc_id ).