我有3个表:
/test/table1
:- 列:
doc_id
,anotherID
,value1
- 列:
/test/table2
:- Columns:
anotherID
,value1
- Columns:
/test/table3
- Columns:
doc_id
,value2
- Columns:
我想选择/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 ).