SQL不在子查询中

SQL不在子查询中,sql,Sql,我有一种情况,我需要从我们的成员表中为特定站点选择“p”的潜在客户关系。然而,当我选择这些人时,我需要排除两组潜在客户。这些组中的每个组在名为MEMBERUDFS的单独表中都有条目。现在,不是MEMBERS表中的所有条目都在MEMBERUDFS表中有条目。因此,我试图通过使用两个非IN子查询将这些组从主查询中排除,但这似乎不起作用。我可以通过以下查询隔离排除组: SELECT MEMBERS_1.memid FROM MEMBERS AS MEMBERS_1 JOIN SITES AS SIT

我有一种情况,我需要从我们的成员表中为特定站点选择“p”的潜在客户关系。然而,当我选择这些人时,我需要排除两组潜在客户。这些组中的每个组在名为MEMBERUDFS的单独表中都有条目。现在,不是MEMBERS表中的所有条目都在MEMBERUDFS表中有条目。因此,我试图通过使用两个非IN子查询将这些组从主查询中排除,但这似乎不起作用。我可以通过以下查询隔离排除组:

SELECT  MEMBERS_1.memid
FROM MEMBERS AS MEMBERS_1
JOIN SITES AS SITES_1 ON MEMBERS_1.siteid = SITES_1.siteid
LEFT JOIN MEMBERUDFS AS MEMBERUDFS_1 ON MEMBERS_1.memid = MEMBERUDFS_1.memid
JOIN MEMBERUDFSETUPS AS MEMBERUDFSETUPS_1 ON MEMBERUDFS_1.udfid = MEMBERUDFSETUPS_1.udfid
WHERE (MEMBERS_1.relationship = 'P')
    AND (MEMBERS_1.email <> '')
    AND (MEMBERUDFS_1.udfid = '26')
    AND (MEMBERUDFS_1.udfvalue = 'No')
    AND (MEMBERS_1.entrydate < DATEADD(DAY, -6, GETDATE()))
    AND (MEMBERS_1.siteid = @rvSite)
此查询:

SELECT  MEMBERS_2.memid
FROM MEMBERS AS MEMBERS_2
JOIN SITES AS SITES_2 ON MEMBERS_2.siteid = SITES_2.siteid
LEFT JOIN MEMBERUDFS AS MEMBERUDFS_2 ON MEMBERS_2.memid = MEMBERUDFS_2.memid
JOIN MEMBERUDFSETUPS AS MEMBERUDFSETUPS_2 ON MEMBERUDFS_2.udfid = MEMBERUDFSETUPS_2.udfid
WHERE (MEMBERS_2.relationship = 'P')
    AND (MEMBERS_2.email <> '')
    AND (MEMBERUDFS_2.udfid = '25')
    AND (MEMBERUDFS_2.udfvalue = 'Yes')
    AND (MEMBERS_2.entrydate < DATEADD(DAY, -21, GETDATE()))
    AND (MEMBERS_2.siteid = @rvSite)
这就是我所做的,但它并没有消除两个子查询组:

SELECT  MEMBERS.scancode,
        MEMBERS.memid,
        MEMBERS.fname,
        MEMBERS.lname,
        MEMBERS.relationship,
        MEMBERS.status,
        MEMBERS.email,
        MEMBERS.entrydate,
        SITES.sitename
FROM MEMBERS
JOIN SITES ON MEMBERS.siteid = SITES.siteid
WHERE (MEMBERS.relationship = 'P')
    AND (MEMBERS.email <> '')
    AND (MEMBERS.siteid = @rvSite)
    AND (MEMBERS.memid NOT IN (
        SELECT MEMBERS_1.memid
        FROM MEMBERS AS MEMBERS_1
        JOIN SITES AS SITES_1 ON MEMBERS_1.siteid = SITES_1.siteid
        LEFT JOIN MEMBERUDFS AS MEMBERUDFS_1 ON MEMBERS_1.memid = MEMBERUDFS_1.memid
        JOIN MEMBERUDFSETUPS AS MEMBERUDFSETUPS_1 ON MEMBERUDFS_1.udfid = MEMBERUDFSETUPS_1.udfid
        WHERE (MEMBERS_1.relationship = 'P')
            AND (MEMBERS_1.email <> '')
            AND (MEMBERUDFS_1.udfid = '26')
            AND (MEMBERUDFS_1.udfvalue = 'No')
            AND (MEMBERS_1.entrydate < DATEADD(DAY, -6, GETDATE()))
            AND (MEMBERS_1.siteid = @rvSite))
    )
    AND (MEMBERS.memid NOT IN (
        SELECT MEMBERS_2.memid
        FROM MEMBERS AS MEMBERS_2
        JOIN SITES AS SITES_2 ON MEMBERS_2.siteid = SITES_2.siteid
        LEFT JOIN MEMBERUDFS AS MEMBERUDFS_2 ON MEMBERS_2.memid = MEMBERUDFS_2.memid
        JOIN MEMBERUDFSETUPS AS MEMBERUDFSETUPS_2 ON MEMBERUDFS_2.udfid = MEMBERUDFSETUPS_2.udfid
        WHERE (MEMBERS_2.relationship = 'P')
            AND (MEMBERS_2.email <> '')
            AND (MEMBERUDFS_2.udfid = '25')
            AND (MEMBERUDFS_2.udfvalue = 'Yes')
            AND (MEMBERS_2.entrydate < DATEADD(DAY, -21, GETDATE()))
            AND (MEMBERS_2.siteid = @rvSite))
    )

任何帮助都将不胜感激

您只需使用where子句即可

 AND (MEMBERS.memid NOT IN (
    SELECT MEMBERS_1.memid
    FROM MEMBERS AS MEMBERS_1
    JOIN SITES AS SITES_1 ON MEMBERS_1.siteid = SITES_1.siteid
    LEFT JOIN MEMBERUDFS AS MEMBERUDFS_1 ON MEMBERS_1.memid = MEMBERUDFS_1.memid
    JOIN MEMBERUDFSETUPS AS MEMBERUDFSETUPS_1 ON MEMBERUDFS_1.udfid = MEMBERUDFSETUPS_1.udfid
    WHERE (MEMBERS_1.relationship = 'P')
        AND (MEMBERS_1.email <> '')
        AND (MEMBERS_1.siteid = @rvSite)
        AND (((MEMBERUDFS_1.udfid = '26') AND (MEMBERUDFS_1.udfvalue = 'No') AND (MEMBERS_1.entrydate < DATEADD(DAY, -6, GETDATE()))) OR
             ((MEMBERUDFS_1.udfid = '25') AND (MEMBERUDFS_1.udfvalue = 'Yes') AND (MEMBERS_1.entrydate < DATEADD(DAY, -21, GETDATE()))))

您确实需要使用代码格式化程序。你拥有SQL的方式是混乱的。考虑一下你的缩进。此外,我们还需要知道实际问题是什么以及期望的输出。表中的一些示例行会很好。您可能需要一些示例数据的变化,而预期的输出会有所帮助。