使用带有 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 语句是啥的主要内容,如果未能解决你的问题,请参考以下文章