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 foreign key) 
-------- 
Field A 
======== 
    2 
    4 

现在,我使用下面的查询这是本

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

我想告诉从表A中的所有数据不等于表B.但上面的查询不工作,我描述。

你能在这方面帮助我吗?

问候,

Fawad穆尼尔

+0

”查询不起作用,正如我描述的那样“ - 谨慎描述哪些工作不准确? – 2010-11-26 00:45:59

。在清晰的尝试,我用的桌子上和小写的领域:

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 

但我不知道这会做你想做的。我认为你想查找表,该表没有表B中匹配的行,在这种情况下,你可以尝试

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

试一下,看看它是否你想要做什么列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中缺少关联的数据。如果是这种情况,看起来您误解了您尝试的连接的语义。在这种情况下,您有两个问题,因为了解JOIN操作对于使用关系数据库至关重要。

关于第一个问题,请研究如何使用IN运算符表示子查询。类似于

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

关于第二个问题,请尝试没有WHERE限制的查询,并查看返回的内容。一旦你了解了连接的作用,你就会明白为什么对它应用WHERE限制并不能解决你的问题。

如果我正确理解你,你希望看到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)