使用带有 ADO 的 Excel 2010 VBA(或带有 LINQ 的 vb.net)查询表的最佳 SQL 语句是啥

Posted

技术标签:

【中文标题】使用带有 ADO 的 Excel 2010 VBA(或带有 LINQ 的 vb.net)查询表的最佳 SQL 语句是啥【英文标题】:What is the best SQL statement to query a table using Excel 2010 VBA with ADO (or vb.net with LINQ)使用带有 ADO 的 Excel 2010 VBA(或带有 LINQ 的 vb.net)查询表的最佳 SQL 语句是什么 【发布时间】:2014-03-06 01:01:58 【问题描述】:

表名:员工

现在我一直在试图弄清楚如何将我的两个 SQL 查询合并为一个。

查询 #1:

    SELECT *
    FROM `employees`
    WHERE `name` = 'BOB'

这显然只返回 1 行。

接下来,我使用组号查找属于该组的任何其他员工。

查询 #2:

    SELECT * 
    FROM `employees` 
    WHERE `group` = 1

这是我希望仅使用一个 SQL 查询(而不是两个)就能返回的记录集。使用 phpMyAdmin 和 mysql 我想出了一个方法,但是在 Excel VBA 和 ADO 中我不知道如何执行相同的语句。

组合查询:

    SET @V1 := (
      SELECT l1.group
      FROM `employees` AS l1
      WHERE l1.name = 'BOB'
    );

    SELECT *
    FROM `employees`
    WHERE `group` = @V1;

现状:

现在我正在使用 Excel 2010 VBA 和 ADO 来查询保存在本地文件夹中的已关闭工作簿。

对于这个例子,我严重地过度简化了表格的结构,但想法是一样的。我在工作簿中的实际表格包含 37,000 多行 19 列。

解决此问题的最佳方法是什么?如果它提供更好的性能和更大的灵活性,我想将 LINQ 与 vb.net 一起使用。

使用 VBA 和 ADO 进行两次查询耗时太长,感觉 Excel 有时会挂起。

【问题讨论】:

也许不是您想要的,但“常规”SQL 方法是使用子查询:SELECT * FROM employees WHERE group in (SELECT group FROM employees WHERE name like 'BOB') @1.618 谢谢!我刚刚调整了我的一些代码,现在正在使用 ADO。感谢您的帮助 - 作为答案发布,如果您愿意,我会选择您的。 【参考方案1】:

这是您需要的 SQL 查询:

SELECT * 
FROM employees 
WHERE group in 
(SELECT group 
FROM employees 
WHERE name like 'BOB')

括号中的部分称为子查询。

【讨论】:

以上是关于使用带有 ADO 的 Excel 2010 VBA(或带有 LINQ 的 vb.net)查询表的最佳 SQL 语句是啥的主要内容,如果未能解决你的问题,请参考以下文章

Excel/ADO/VBA:计数返回不正确的结果

VBA利用ADO操作EXCEL表

VBA Excel里 用ADO访问ACCESS数据库的问题

VBA Excel ADO SQL 更新查询不起作用

Excel VBA 导出到 Access:ADO 错误

Excel VBA ADO查询循环太多行