Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在返回错误值的SQL中添加DISTINCT子句_Sql_Performance_Vba_Excel - Fatal编程技术网

在返回错误值的SQL中添加DISTINCT子句

在返回错误值的SQL中添加DISTINCT子句,sql,performance,vba,excel,Sql,Performance,Vba,Excel,一点背景知识:我在一家有大量用户在excel中运行报表的公司工作。它们通常需要宏来比较两组数据。我的大部分工作涉及调整特定的更改报告宏。不漂亮,但它能支付账单 今天我有一个想法,将excel表格拉入vba中的ADODB对象,然后对该对象运行SQL。一切似乎都很顺利。。。但后来我遇到了奇怪的行为 这将返回表1中没有.Name的所有名称。它工作得很好,但有些名字出现过多次 SELECT a.Name FROM [Table1] AS a LEFT JOIN [Table2] AS b ON a.Na

一点背景知识:我在一家有大量用户在excel中运行报表的公司工作。它们通常需要宏来比较两组数据。我的大部分工作涉及调整特定的更改报告宏。不漂亮,但它能支付账单

今天我有一个想法,将excel表格拉入vba中的ADODB对象,然后对该对象运行SQL。一切似乎都很顺利。。。但后来我遇到了奇怪的行为

这将返回表1中没有.Name的所有名称。它工作得很好,但有些名字出现过多次

SELECT a.Name FROM [Table1] AS a
LEFT JOIN [Table2] AS b
ON a.Name = b.Name
WHERE b.Name IS NULL
添加distinct子句:

SELECT DISTINCT a.Name FROM [Table1] AS a
LEFT JOIN [Table2] AS b
ON a.Name = b.Name
WHERE b.Name IS NULL
完全更改出现的名称。显示的内容是不同的,但在两个表中都有

我试着将其改写为一组,以替换不同的值,得到了相同的结果。我和当地的古鲁商量过了,没有结果。下一步是在这里安装一个真正的数据库来运行一些测试


不过我还是很困惑。

我不确定这是否适用于vba中的ADODB对象,但我会在MySQL的SQL Server中执行以下操作

如果我没看错你的问题,你是想从表A中找到表B中没有的名字

SELECT DISTINCT a.Name 
FROM [Table1] AS a
WHERE a.Name not in (
           SELECT b.Name
           FROM [Table2] AS b
      )
使用外部联接:

SELECT DISTINCT a.Name FROM [Table1] AS a
LEFT outer JOIN [Table2] AS b
ON a.Name = b.Name
WHERE b.Name IS NULL
从评论中:


如果恰好有超过65536行,是否使用了正确的Excel 2007 Forwards连接字符串(其中提供程序为“Microsoft.ACE.OLEDB.12.0”)?如果对超过65K行的工作表使用旧的Excel 2003连接字符串(带有提供程序“Microsoft.Jet.OLEDB.4.0”),则会出现问题–barrowc


巴罗克搞定了。导致问题的是旧的连接字符串。因为我有超过64k行的数据,所以输出的行为异常。将Jet字符串替换为“Microsoft.ACE.OLEDB.12.0”修复了该问题。

我在Excel中的一些简单表上尝试了这两种SQL语句,并从中获得了正确的输出。唯一的区别是,DISTINCT会像预期的那样抑制重复的行。在ADO连接定义中,是否使用IMEX=1来允许混合数据类型?@sten。它只是以不同的顺序返回名称。如果您希望结果按特定顺序排列,则需要一个
order by
子句。@barrowc我应该注意,我用一小部分值尝试了这个方法,并得到了正确的答案。生产组超过10的数千行。同样,它在任何集合上都不使用distinct,而使用distinct生成其他结果。@GordonLinoff这个问题与结果的顺序无关。正在返回不同的结果。如果有什么我可以补充以提高清晰度,请告诉我。当我重新登录时,我会这样做。如果您恰好有超过65536行,您是否使用了正确的Excel 2007 Forwards连接字符串(其中提供程序为“Microsoft.ACE.OLEDB.12.0”)?如果对超过65K行的工作表使用较旧的Excel 2003连接字符串(带有提供程序“Microsoft.Jet.OLEDB.4.0”),则问题往往会出现。我尝试了一种变体,明天我将再次尝试,可能是我第一次没有正确执行。在这种情况下,Outer不是有效的关键字。ADODB没有接受。很高兴它起作用了。有关详细的连接字符串信息,请参阅