如何 SELECT 存在于多 table 中?
How to SELECT WHERE EXISTS in multi table?
我有 3 个 tables:
/test/table1
:
- 列:
doc_id
、anotherID
、value1
/test/table2
:
- 列:
anotherID
、value1
/test/table3
- 列:
doc_id
、value2
我想 select /test/table1
的数据有 2 个条件。 /test/table2
中的一种情况和 /test/table3
中的另一种情况。
所以我 select 我的数据在一个 table 中有一个条件是这样的:
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 ).
select内容如我所料。但现在我想添加一个条件,仅 select 此数据但仅 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/table3
中至少有一行 e~value2 = 2
,无论 table [=14= 的内容如何,条件 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 ).
我有 3 个 tables:
/test/table1
:- 列:
doc_id
、anotherID
、value1
- 列:
/test/table2
:- 列:
anotherID
、value1
- 列:
/test/table3
- 列:
doc_id
、value2
- 列:
我想 select /test/table1
的数据有 2 个条件。 /test/table2
中的一种情况和 /test/table3
中的另一种情况。
所以我 select 我的数据在一个 table 中有一个条件是这样的:
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 ).
select内容如我所料。但现在我想添加一个条件,仅 select 此数据但仅 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/table3
中至少有一行 e~value2 = 2
,无论 table [=14= 的内容如何,条件 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 ).