MS Acces加入查询与WHERE条件
我正在使用MS Access 2010并苦苦寻找以下查询。假设我有两张表,tblWeeklyData和tblMainData,它们都包含有关学生及其班级的信息。每个表中的记录通过公共密钥fldStudentNumber进行链接。假设这两个表还包含字段fldClass,其中包含学生正在使用的班级的名称。MS Acces加入查询与WHERE条件
tblWeeklyData保存新的学生信息,并与tblMainData进行比较,以仅识别正在学习新课程的现有学生。
我要查询两个表,以确定学生tblWeeklyData已经在tblMainData(上StudentNumber匹配),并且存在正在研究一个新的类,即有针对特定学生tblWeeklyData.fldClass和tblMainData.fldClass之间不匹配。 。
[编辑]内tblWeeklyData新来的学生没有在tblMainData匹配StudentNumber不应由该查询返回[/编辑]
我使用的SQL是:
SELECT [tblWeeklyData].fldStudentNumber, [tblWeeklyData].fldClass
FROM tblWeeklyData INNER JOIN tblMainData ON
([tblWeeklyData].fldStudentNumber = tblMainData.fldStudentNumber)
WHERE ((([tblWeeklyData].fldClass)<>[tblMainData].[fldClass]));
如果tblWeeklyData包含行
fldStudentNumber fldClass
A0001 Chemistry
和tblMainData包含
fldStudentNumber fldClass
A0001 Art
A0001 Biology
上述查询正确地从tblWeeklyData现有的学生A0001返回研究新类化学:
fldStudentNumber fldClass
A0001 Chemistry
但是,此查询不与下面的数据工作:
tblWeeklyData
-------------
fldStudentNumber fldClass
A0001 Chemistry
A0001 Dentistry
blMainData
----------
fldStudentNumber fldClass
A0001 Art
A0001 Biology
A0001 Chemistry
我想查询仅从tblWeeklyData返回“A0001牙科”,因为牙科是现有学生A0001正在学习的唯一的“新”类。然而,该查询返回:
fldStudentNumber fldClass
A0001 Chemistry
A0001 Dentistry
我不想排“A0001化学”被返回化学是不是学生A0001一个新的类,它已经在tblMainData存在。
[编辑]为了证明不应该返回新同学,假设有
tblWeeklyData
-------------
fldStudentNumber fldClass
A0001 Chemistry
A0001 Dentistry
A0002 Zoology
blMainData
----------
fldStudentNumber fldClass
A0001 Art
A0001 Biology
A0001 Chemistry
在这里,学生A002不应该,因为它不存在tblMainData返回两个表。这可能吗?
[/编辑]
我曾尝试没有成功上述查询的许多变型。在最后一个例子中,我可以看到WHERE子句的计算结果为“化学<>艺术”或“化学<>生物学”,因此我需要一个不同的WHERE条件来查看给定学生正在研究的每个“班级”如果一个类是新的,我已经看过SQL EXISTS IN和子查询,但我还没有能够解决它。
在这个问题上的任何帮助将衷心感谢,
问候
罗比
的WHERE
不起作用,因为它只比较相同行的值,你需要比较第一个表的每个值都与第二个表的每个值相关,但不包括两个表。
如果你这样做是为了每次只有一个学生,你可以使用IN
:
SELECT fldStudentNumber, fldClass
FROM tblWeeklyData
WHERE fldStudentNumber='A0001'
AND fldClass NOT IN (SELECT fldClass FROM tblMainData WHERE fldStudentNumber='A0001')
如果您需要做的几个学生在同一时间或有一个以上的条件,那么你需要用户EXISTS
代替:
SELECT fldStudentNumber, fldClass
FROM tblWeeklyData
WHERE NOT EXISTS (SELECT * FROM tblMainData
WHERE tblMainData.fldStudentNumber=tblWeeklyData.fldStudentNumber
AND tblMainData.fldClass=tblWeeklyData.fldClass)
谢谢阿尔贝托 - 您所提供的解决方案完美地工作,但是,我看到我的问题的初步框架过于简化,并没有指出应返回唯一存在两个表中的学生。例如,如果在tblWeeklyData中存在一个新学生,该新学生在tblMainData中没有匹配的StudentNumber,则不应返回。我会去我的第一篇文章,并编辑它来进一步解释我的意思, – RobbieThompson73