繁体   English   中英

使用MS Access的Sql Join查询

[英]Sql Join Query using MS Access

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

我正在使用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的所有数据,这些数据不等于表B。但是上述查询没有按照我的描述进行。

您能在这方面帮助我吗?

问候,

法瓦德·穆尼尔(Fawad Munir)

为了清楚起见,我对表使用大写字母,对字段使用小写字母:

Select A.a
FROM A LEFT OUTER JOIN B ON A.a=B.b
WHERE B.b is null

这将显示A中所有不在B中的记录(我想这就是您想要的)。

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

在您的问题中,您说表B中的字段名称为“ A”。 鉴于此,我想说您的查询应类似于

select a.a
  from a, b
  where a.a <> b.a

但是我不确定这是否会满足您的需求。 认为您正在尝试在表A中查找表B中没有匹配行的行,在这种情况下,您可以尝试

SELECT A.A
  FROM A
LEFT OUTER JOIN B
  ON (B.A = A.A)
WHERE B.A IS NULL

尝试一下,看看它是否满足您的要求。

分享并享受。

我不确切知道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中缺少关联数据。如果是这种情况,似乎您误解了表B的语义。加入你的尝试。 在这种情况下,您会有两个问题,因为了解JOIN操作对于使用关系数据库至关重要。

关于第一个问题,请研究如何使用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)

许多人更喜欢过滤的JOIN:

 SELECT tableA.* FROM tableA LEFT OUTER JOIN tableB
    ON tableA.columnA = tableB.columnB WHERE tableB.columnB IS NULL

也有一个NOT EXISTS变体:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM