微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在多表中选择 WHERE EXISTS?

如何解决如何在多表中选择 WHERE EXISTS?

我有 3 张桌子:

  • /test/table1
    • 列:doc_idanotherIDvalue1
  • /test/table2
    • 列:anotherIDvalue1
  • /test/table3
    • 列:doc_idvalue2

我想用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 ).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。