SQL查询不过滤

问题描述 投票:0回答:1

我有这个疑问

SELECT
    *
FROM
    PROJEMPLTRANS AS pej
    LEFT JOIN PROJTABLE AS pt ON pt.PROJID = pej.PROJID
    LEFT JOIN
    (
        SELECT
            WRKCTRRESOURCEGROUPRESOURCE.RECID
        FROM
            WRKCTRRESOURCEGROUPRESOURCE
            LEFT JOIN WRKCTRRESOURCEGROUP ON
                WRKCTRRESOURCEGROUPRESOURCE.RESOURCEGROUP = WRKCTRRESOURCEGROUP.RECID
        WHERE
            WRKCTRRESOURCEGROUP.WRKCTRID = 'Z_NAS'
    ) AS skupina
        ON skupina.RECID = pej.RESOURCE_

不幸的是,这部分有效:

WHERE WRKCTRRESOURCEGROUP.WRKCTRID = 'Z_NAS'

无论我是否有它,我总是得到相同数量的行。 我正在对 Microsoft Dynamics 365 FO 进行 SQL 查询

我厌倦了使用 CTE,但结果相同。

这是使用 CTE 的查询:

WITH skupina AS (
    SELECT
        WRKCTRRESOURCEGROUPRESOURCE.RECID
    FROM
        WRKCTRRESOURCEGROUPRESOURCE
        LEFT JOIN WRKCTRRESOURCEGROUP ON
            WRKCTRRESOURCEGROUPRESOURCE.RESOURCEGROUP = WRKCTRRESOURCEGROUP.RECID
    WHERE
        WRKCTRRESOURCEGROUP.WRKCTRID = 'Z_NAS'
)
SELECT
    *
FROM
    PROJEMPLTRANS AS pej
    LEFT JOIN PROJTABLE AS pt ON pt.PROJID = pej.PROJID
    LEFT JOIN skupina ON skupina.RECID = pej.RESOURCE_;
sql sql-server microsoft-dynamics axapta erp
1个回答
0
投票

摆脱

LEFT JOIN
并尝试普通的内心
JOIN
LEFT JOIN
保留第一个表中与您的
ON
子句不匹配的行,因此您会从该表中获得一团糟的额外结果。

© www.soinside.com 2019 - 2024. All rights reserved.