我有3张桌子:
/test/table1:
doc_id, anotherID,value1/test/table2:
anotherID,value1/test/table3
doc_id,value2我想选择/test/table1具有 2 个条件的数据。一个条件在/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 ).
Run Code Online (Sandbox Code Playgroud)
它按照我的预期选择内容。但现在我想添加一个条件,只选择这个数据,但只选择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 ).
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我的内容和以前一样......它不需要我的第二个条件。
我不明白什么?
EXISTS ( SELECT * FROM /test/table3 AS e WHERE e~value2 = 2 )如果/test/table3with中至少有一行,则条件总是被评估为 TRUE e~value2 = 2,无论 table 的内容如何/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 ).
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |