[英]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.