【问题标题】:SQL WHERE ... IN recordsetSQL WHERE ... IN 记录集
【发布时间】:2015-10-10 21:24:38
【问题描述】:

给定 VBA 中的 Recordset 是先前 SQL 查询的结果,我如何在新 SQL 语句的 WHERE 子句中使用此 Recordset 的结果?

我想写这样的东西:

SELECT ID FROM MyTable WHERE ID IN <<ID column of myRecordSet>> ;

显然这不是正确的语法。我希望它选择MyTable 中具有与myRecordSet 中的ID 之一匹配的ID 的所有行。或者换句话说,我正在尝试做一些类似于 SQL 子查询的事情,除了子查询是一个记录集。

同样显然,我可以通过迭代 myRecordSet 逐个元素地构建 IN (a,b,c) 表达式,但我问这个问题是因为我认为这是不必要的。

(这个问题的基础是新查询的 ID 列表来自 Recordset;我意识到可能还有其他方法可以做这种事情,但我需要知道如何在这个特定的方式。)

【问题讨论】:

    标签: sql vba ms-access ms-access-2010 recordset


    【解决方案1】:

    如果您的记录集基于来自同一数据库的其他查询,那么您可以使用(myQuery 可能包含您需要的所有 WHERE 和其他子句):

    SELECT ID FROM MyTable WHERE ID IN (select ID from myQuery)
    

    如果您的记录集是综合的或来自不同的数据源,那么您只需通过迭代记录集来构建 ID 列表。

    【讨论】:

    • 它不是合成的,但我必须保证只选择记录集中的项目,即使数据库在创建记录集的查询后发生了变化。所以重用 WHERE 子句是不安全的。
    猜你喜欢
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    相关资源
    最近更新 更多