Access SQL 中的联接语句
Posted
技术标签:
【中文标题】Access SQL 中的联接语句【英文标题】:Join Statements in Access SQL 【发布时间】:2014-11-18 13:19:47 【问题描述】:我不熟悉 SQL 以及它如何与 Access 一起工作,但我遇到了查询只返回特定集合中的项目的问题。
所以根据我阅读的定义,LEFT JOIN 语句应该返回左表中的所有记录,然后只返回右表中的特定记录。由于某种原因,它不会从我的左表返回所有记录。请看下面的代码。它仍然以某种方式只想返回具有某种关系的记录。有任何想法吗?我希望返回左表 (tbl_historicOrg) 中的所有记录,然后只返回右表中的特定记录。
SELECT tbl_historicOrg.NAME, tbl_historicOrg.Racf, tbl_historicOrg.STATUS, tbl_historicOrg.PCF, tbl_historicOrg.[Date Finalized], tbl_historicOrg.[Hist Month], import_data.SCHDLE_EXCPT_NM, import_data.HOURS
FROM tbl_historicOrg LEFT JOIN import_data ON tbl_historicOrg.Racf = import_data.RACF
WHERE (((import_data.SCHDLE_EXCPT_NM)="System Problems"));
任何建议或更正将不胜感激。
【问题讨论】:
所述查询将返回 tbl_historicOrg 中符合 WHERE 条件的所有记录。并将这些行与 RACF 匹配的 import_data 中的相应行匹配。发布一些数据和你得到的结果和你的期望。 【参考方案1】:尝试如下;获取过滤后的数据并使用该结果集执行JOIN
SELECT tbl_historicOrg.NAME,
tbl_historicOrg.Racf,
tbl_historicOrg.STATUS,
tbl_historicOrg.PCF,
tbl_historicOrg.[Date Finalized],
tbl_historicOrg.[Hist Month],
tab.SCHDLE_EXCPT_NM,
tab.HOURS
FROM tbl_historicOrg
LEFT JOIN (
select SCHDLE_EXCPT_NM,
HOURS,
RACF
from import_data where SCHDLE_EXCPT_NM = "System Problems" ) as tab
ON tbl_historicOrg.Racf = tab.RACF;
【讨论】:
您好,感谢您的解决方案。它工作得非常好(除了最后一个导致错误的过滤语句)。它会过滤掉/不包括在小时列中没有数字的任何条目。你知道为什么会这样吗? 基本上,我们需要显示所有的historyOrg 记录(使用上述列),如果适用,还需要一列系统问题。 @jpford,介意用编辑过的查询再试一次。请参阅编辑后的答案。 您的解决方案效果很好。我对导致我现在正在修复的问题的源数据有疑问。再次感谢您的帮助。【参考方案2】:您的查询应该如下所示,不要对第二个表使用 'WHERE' 子句,它会过滤 'import_data.SCHDLE_EXCPT_NM = "System Problems"' 的数据
SELECT tbl_historicOrg.NAME, tbl_historicOrg.Racf, tbl_historicOrg.STATUS,
tbl_historicOrg.PCF, tbl_historicOrg.[Date Finalized], tbl_historicOrg.[Hist Month],
import_data.SCHDLE_EXCPT_NM, import_data.HOURS
FROM tbl_historicOrg LEFT JOIN import_data ON tbl_historicOrg.Racf = import_data.RACF
【讨论】:
以上是关于Access SQL 中的联接语句的主要内容,如果未能解决你的问题,请参考以下文章