使用MS Access的Sql连接查询

使用MS Access的Sql连接查询,sql,ms-access,Sql,Ms Access,您好,我在比较两个表之后从一个表中获取行时遇到问题。两个表的详细信息如下:- 我正在使用Ms Access数据库 TableA is having a data of numeric type (Field Name is A it is primary key) ---------- Field A ========== 1 2 3 4 5 Table B is having data of numeric type ( Field Name is A it is fo

您好,我在比较两个表之后从一个表中获取行时遇到问题。两个表的详细信息如下:-

我正在使用Ms Access数据库

TableA is having a data of numeric type (Field Name is A it is primary key)
----------
 Field A
==========
  1
  2
  3
  4
  5

Table B is having data of numeric type ( Field Name is A it is foreign key)
--------
Field A
========
  2
  4
现在我使用下面的查询,这是什么

select a.a 
    from a a
        , b b 
    where a.a <> b.b
选择a.a
从a
,b
a.a.b.b.在哪里

我想显示表A中不等于表B的所有数据。但是上面的查询没有如我所描述的那样工作

在这方面你能帮我吗

问候,


Fawad Munir

为了清晰起见,我将大写字母用于表格,小写字母用于字段:

Select A.a
FROM A LEFT OUTER JOIN B ON A.a=B.b
WHERE B.b is null
这将显示A中不在B中的所有记录(我假设这是您想要的)


阅读访问外部连接。在查询设计器中,双击联接并选择类似“表a中的所有记录,仅表b中的匹配记录”的内容。

在您的问题中,您说过表b中字段的名称为“a”。鉴于此,我认为您的查询应该是

select a.a
  from a, b
  where a.a <> b.a
试试看,看它是否符合你的要求


分享和享受。

我不知道Access是否会接受这种语法,但在这里我将如何使用SQL Server

select a.a
    from TableA a
    where a.a NOT IN (
        select b.a
            from TableB b                
    )
甚至如上所述:

select a.a
    from TableA a
        left outer join TableB b on b.a = a.a
    where b.a IS NULL

目前还不完全清楚您试图实现什么,但听起来您似乎是在试图解决在表A中查找缺少表B中关联数据的行的常见问题。如果是这种情况,您似乎误解了您尝试的联接的语义。在这种情况下,您有两个问题,因为理解连接操作对于使用关系数据库至关重要

关于第一个问题,请研究如何使用In运算符表示子查询。差不多

...  WHERE a NOT IN (SELECT a from b)

关于第二个问题,请尝试不带WHERE限制的查询,并查看返回的内容。一旦您了解联接的作用,您就会明白为什么对其应用WHERE限制无法解决您的问题。

如果我理解正确,您希望查看a列中的每一行,其中a列包含的值在b列的任何b值中都找不到。您可以通过多种方式获取此数据

我个人认为,使用NOT IN是最清楚的:

 SELECT * FROM tableA WHERE columnA NOT IN 
   (SELECT columnB FROM tableB WHERE columnB IS NOT NULL)
许多人更喜欢过滤连接:

 SELECT tableA.* FROM tableA LEFT OUTER JOIN tableB
    ON tableA.columnA = tableB.columnB WHERE tableB.columnB IS NULL
还有一个不存在的变体:

 SELECT * FROM tableA WHERE columnA NOT EXISTS
   (SELECT * FROM tableB WHERE columnB = tableA.columnA)

“查询没有如我所描述的那样工作”-请准确描述哪些不工作?您所说的“表A中不等于表B的所有数据”是什么意思?对于表A中的每一行,您的查询将匹配表B中列A不同于列B的每一行,这真的是您想要的吗?
 SELECT * FROM tableA WHERE columnA NOT EXISTS
   (SELECT * FROM tableB WHERE columnB = tableA.columnA)