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穆尼尔
。在清晰的尝试,我用的桌子上和小写的领域:
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)
“
”查询不起作用,正如我描述的那样“ - 谨慎描述哪些工作不准确? – 2010-11-26 00:45:59