繁体   English   中英

带有UNION子句和WHERE子句的VBA-ACCESS DAO SQL

[英]VBA-ACCESS DAO SQL with UNION clause and WHERE clause

这只是我的代码的一小部分,但在此特定部分中,我试图执行以下语句:

“在哪里([SummaryTbl]。[WORK_ITEM_NMB]> 2500)和([[ParentChildTbl]。[WORK_ITEM_NMB]> 2500)”

我已经使用了所有的JOINS / UNION,因为ACCESS不支持FULL OUTER JOIN,并且一切正常。 但是,我希望它只返回两个表的WORK_ITEM_NMB都大于2500的值,并且这不起作用。 它一直在给我所有记录。 我在想我将WHERE子句放在错误的位置,和/或必须将其添加到每个JOIN语句中。 我没有错。 我只是得到所有记录。

Set db = OpenDatabase(DBLoc)
SQL = "SELECT [SummaryTbl].[WORK_ITEM_NMB], [SummaryTbl].[WORK_ITEM_STS], [SummaryTbl].[RELEASE_NMB], [SummaryTbl].[NOMADS_PRIORITY], [SummaryTbl].[TEST_ACTUAL_DT], [SummaryTbl].[TRAIN_ACTUAL_DT], [SummaryTbl].[TITLE], [SummaryTbl].[DESCRIPTION], [SummaryTbl].[DETAILED_RQ_COMMENTS], [SummaryTbl].[TRAIN_COMMENTS], [SummaryTbl].[TEST_COMMENTS], [ParentChildTbl].[HasAssocWI] FROM SummaryTbl LEFT JOIN ParentChildTbl ON [SummaryTbl].[WORK_ITEM_NMB] = [ParentChildTbl].[WORK_ITEM_NMB] UNION SELECT [SummaryTbl].[WORK_ITEM_NMB], [SummaryTbl].[WORK_ITEM_STS], [SummaryTbl].[RELEASE_NMB], [SummaryTbl].[NOMADS_PRIORITY], [SummaryTbl].[TEST_ACTUAL_DT], [SummaryTbl].[TRAIN_ACTUAL_DT], [SummaryTbl].[TITLE], [SummaryTbl].[DESCRIPTION], [SummaryTbl].[DETAILED_RQ_COMMENTS], [SummaryTbl].[TRAIN_COMMENTS], [SummaryTbl].[TEST_COMMENTS], [ParentChildTbl].[HasAssocWI] FROM SummaryTbl RIGHT JOIN ParentChildTbl ON [SummaryTbl].[WORK_ITEM_NMB] = [ParentChildTbl].[WORK_ITEM_NMB]" & _
"WHERE ([SummaryTbl].[WORK_ITEM_NMB]>2500) AND ([ParentChildTbl].[WORK_ITEM_NMB]>2500)"


'Execute Query and populate recordset
Set rs = db.OpenRecordset(SQL, dbOpenSnapshot)

谢谢!

您需要在两个 select语句中包含where子句,因为select语句将union 之前进行求值; 因此,您将需要以下内容:

SELECT 
    [SummaryTbl].[WORK_ITEM_NMB], 
    [SummaryTbl].[WORK_ITEM_STS], 
    [SummaryTbl].[RELEASE_NMB], 
    [SummaryTbl].[NOMADS_PRIORITY], 
    [SummaryTbl].[TEST_ACTUAL_DT], 
    [SummaryTbl].[TRAIN_ACTUAL_DT], 
    [SummaryTbl].[TITLE], 
    [SummaryTbl].[DESCRIPTION], 
    [SummaryTbl].[DETAILED_RQ_COMMENTS], 
    [SummaryTbl].[TRAIN_COMMENTS], 
    [SummaryTbl].[TEST_COMMENTS], 
    [ParentChildTbl].[HasAssocWI] 
FROM 
    SummaryTbl LEFT JOIN ParentChildTbl ON
    [SummaryTbl].[WORK_ITEM_NMB] = [ParentChildTbl].[WORK_ITEM_NMB] 
WHERE 
    ([SummaryTbl].[WORK_ITEM_NMB]>2500) AND 
    ([ParentChildTbl].[WORK_ITEM_NMB]>2500)
UNION 
SELECT
    [SummaryTbl].[WORK_ITEM_NMB], 
    [SummaryTbl].[WORK_ITEM_STS], 
    [SummaryTbl].[RELEASE_NMB],
    [SummaryTbl].[NOMADS_PRIORITY], 
    [SummaryTbl].[TEST_ACTUAL_DT], 
    [SummaryTbl].[TRAIN_ACTUAL_DT], 
    [SummaryTbl].[TITLE], 
    [SummaryTbl].[DESCRIPTION], 
    [SummaryTbl].[DETAILED_RQ_COMMENTS], 
    [SummaryTbl].[TRAIN_COMMENTS], 
    [SummaryTbl].[TEST_COMMENTS], 
    [ParentChildTbl].[HasAssocWI] 
FROM 
    SummaryTbl RIGHT JOIN ParentChildTbl ON 
    [SummaryTbl].[WORK_ITEM_NMB] = [ParentChildTbl].[WORK_ITEM_NMB]
WHERE 
    ([SummaryTbl].[WORK_ITEM_NMB]>2500) AND 
    ([ParentChildTbl].[WORK_ITEM_NMB]>2500)

但是,看起来您的第二条select语句应该从ParentChildTbl表(在连接右侧)而不是SummaryTbl表中获取WORK_ITEM_NMB字段。

另外,由于要加入WORK_ITEM_NMB字段,因此只需要在要返回所有记录的表中对此进行过滤。

您还可以将选择标准应用于union的结果,例如:

SELECT t.* 
FROM
(
    SELECT 
        [SummaryTbl].[WORK_ITEM_NMB], 
        [SummaryTbl].[WORK_ITEM_STS], 
        [SummaryTbl].[RELEASE_NMB], 
        [SummaryTbl].[NOMADS_PRIORITY], 
        [SummaryTbl].[TEST_ACTUAL_DT], 
        [SummaryTbl].[TRAIN_ACTUAL_DT], 
        [SummaryTbl].[TITLE], 
        [SummaryTbl].[DESCRIPTION], 
        [SummaryTbl].[DETAILED_RQ_COMMENTS], 
        [SummaryTbl].[TRAIN_COMMENTS], 
        [SummaryTbl].[TEST_COMMENTS], 
        [ParentChildTbl].[HasAssocWI] 
    FROM 
        SummaryTbl LEFT JOIN ParentChildTbl ON
        [SummaryTbl].[WORK_ITEM_NMB] = [ParentChildTbl].[WORK_ITEM_NMB] 
    UNION 
    SELECT
        [ParentChildTbl].[WORK_ITEM_NMB], 
        [SummaryTbl].[WORK_ITEM_STS], 
        [SummaryTbl].[RELEASE_NMB],
        [SummaryTbl].[NOMADS_PRIORITY], 
        [SummaryTbl].[TEST_ACTUAL_DT], 
        [SummaryTbl].[TRAIN_ACTUAL_DT], 
        [SummaryTbl].[TITLE], 
        [SummaryTbl].[DESCRIPTION], 
        [SummaryTbl].[DETAILED_RQ_COMMENTS], 
        [SummaryTbl].[TRAIN_COMMENTS], 
        [SummaryTbl].[TEST_COMMENTS], 
        [ParentChildTbl].[HasAssocWI] 
    FROM 
        SummaryTbl RIGHT JOIN ParentChildTbl ON 
        [SummaryTbl].[WORK_ITEM_NMB] = [ParentChildTbl].[WORK_ITEM_NMB]
) t
WHERE t.[WORK_ITEM_NMB] > 2500

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM