如何查找将表中的一个字段与另一表中的多个字段进行比较的匹配记录?

问题描述

| 使用MS Access 2010,我有两个表要通过比较相似的字段(1:1和1:M)在其中一个表中找到匹配的记录。 表1,[760Vadim]具有四个字段:对开,PID号1,PID号2,PID号3 表2,[no_dupes]有两个字段:Folio,PID 我需要从[no_dupes]中的相似字段中找到[760Vadim]中具有匹配值的所有记录。 比较Folio字段是1:1联接,而比较PID则是1:M(1:3),它们都需要同时进行比较! 我已经尝试过使用Join和以下sql语句: 1.)有效,但一次只能用于一个领域!
SELECT [760Vadim].*,no_dupes.PID
FROM no_dupes INNER JOIN 760Vadim ON no_dupes.PID = [760Vadim].[PID Number1]
WHERE (((no_dupes.PID) Like [760Vadim].[PID Number1]));
2.)将PID与两个字段进行比较时不起作用,返回了0条记录...!
SELECT [760Vadim].*,no_dupes.PID
FROM no_dupes INNER JOIN 760Vadim ON (no_dupes.PID = [760Vadim].[PID Number2]) AND (no_dupes.PID = [760Vadim].[PID Number1])
WHERE (((no_dupes.PID) Like [760Vadim].[PID Number1])) OR (((no_dupes.PID) Like [760Vadim].[PID Number2]));
3.)这种工作方式...但是返回重复项...并返回设计视图,由于将AND更改为OR,它说无效的运算符,所以不喜欢我的=符号?
SELECT [760Vadim].*,no_dupes.PID
FROM no_dupes INNER JOIN 760Vadim ON (no_dupes.PID = [760Vadim].[PID Number2]) OR (no_dupes.PID = [760Vadim].[PID Number1])
WHERE (((no_dupes.PID) Like [760Vadim].[PID Number1])) OR (((no_dupes.PID) Like [760Vadim].[PID Number2]));
还尝试了另一个论坛的建议: 1.)有效(我认为...),但是又重复了!
SELECT [760Vadim].*
FROM 760Vadim,no_dupes
WHERE ((([760Vadim].folio)=[no_dupes].[DATA_SO1])) OR ((([760Vadim].[PID Number1])=[no_dupes].[PID])) OR ((([760Vadim].[PID Number2])=[no_dupes].[PID])) OR ((([760Vadim].[PID Number3])=[no_dupes].[PID]));
如果找到作品集匹配项,则似乎要经过并返回一条记录;如果从其他三个字段中找到匹配的PID,则返回另一条记录(可能是重复的)。 对于类似的问题,建议使用联接内部的CONCAT功能删除重复项。 我还尝试添加:在where语句之后的
GROUP BY [760Vadim].*;
删除重复项但无济于事,它说不能对所有记录进行分组,这是我需要的。我是Access的新手,但对sql(基本)有所了解。 抱歉,如果张贴在错误的堆栈中,它可能在Programmers或Database stackexchange中坐得更好? 编辑: 我尝试了不带Join的选项:
SELECT disTINCT v.*
FROM   [760Vadim] v 
WHERE
      EXISTS(SELECT * FROM  no_dupes nd 
         WHERE nd.pid LIKE v.[PID Number1] 
             OR nd.pid LIKE v.[PID Number2] 
             OR nd.pid LIKE v.[PID Number3]
             OR nd.folio LIKE v.[folio] )
您提供的选项仅返回760Vadim表中的四列,因此最好查看所有列。 我还注意到它没有比较作品集字段(对不起,该规格在我的漫步中丢失了)。 如果在no_dupes中找到匹配项,我是否将其正确格式化为760Vadim中所有列的
SELECT disTINCT
? 当我回到sql /设计视图时,它将引发异常错误并将sql更改为:
SELECT disTINCT v.* INTO query_final
FROM 760Vadim AS v
WHERE (((Exists (SELECT * FROM  no_dupes nd 
         WHERE nd.pid LIKE v.[PID Number1] 
             OR nd.pid LIKE v.[PID Number2] 
             OR nd.pid LIKE v.[PID Number3]
             OR nd.folio LIKE v.[folio] ))<>False));
    

解决方法

        你有几个选择 使用DISTINCT / JOIN
SELECT DISTINCT v.folio,v.[PID Number1],v.[PID Number2],v.[PID Number3] 
FROM   [760Vadim] v 
       INNER JOIN no_dupes nd 
         ON nd.pid LIKE v.[PID Number1] 
             OR nd.pid LIKE v.[PID Number2] 
             OR nd.pid LIKE v.[PID Number3] 
使用区域/存在
SELECT DISTINCT 
       v.folio,v.[PID Number3] 
FROM   [760Vadim] v 
WHERE
      EXISTS(SELECT * FROM  no_dupes nd 
         WHERE nd.pid LIKE v.[PID Number1] 
             OR nd.pid LIKE v.[PID Number2] 
             OR nd.pid LIKE v.[PID Number3] )
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...