问题描述
我有 3 张桌子:
-
/test/table1
:- 列:
doc_id
、anotherID
、value1
- 列:
-
/test/table2
:- 列:
anotherID
、value1
- 列:
-
/test/table3
- 列:
doc_id
、value2
- 列:
我想用2个条件选择/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 ).
当我这样做时,我的内容和以前一样......不需要我的第二个条件。
我不明白什么?
解决方法
如果 EXISTS ( SELECT * FROM /test/table3 AS e WHERE e~value2 = 2 )
中至少有一行带有 /test/table3
,则条件 e~value2 = 2
总是被评估为 TRUE,无论表 /test/table1
的内容如何。
要使其根据 /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 ).