不存在不在sql中工作

时间:2015-08-17 21:06:36

标签: sql sql-server

当我运行第二个括号(两个查询及其交集)时,我得到的行数与查询的行数不同SELECT * FROM Table1 WHERE (DateEntered >= '2015-06-13 00:00:00.000')'

但是在这里,我没有结果。我得到0行。你能告诉我我错在哪里,是一些语法还是其他一些东西?

SELECT * 
FROM Table1 
WHERE (DateEntered >= '2015-06-13 00:00:00.000')
  AND NOT EXISTS (SELECT GID, MID 
                  FROM Table1       
                  WHERE MMID IN (SELECT MAX(MMID) 
                                 FROM Table1
                                 WHERE DateEntered >= '2015-06-13 00:00:00.000'
                                 GROUP BY GID, MID)

intersect

SELECT GID, MID 
FROM Table1 
WHERE MMID IN (SELECT MIN(MMID) 
               FROM Table1
               WHERE DateEntered < '2015-06-13 00:00:00.000'
               GROUP BY GID, MID))

预期输出

我只想要那些在6月13日之后从未发生过的价值观。因此,我相交并获得日期范围之前和之后存在的值。然后我用Not exists删除它。

你可以指导我吗?为什么我得到0行,即使应该有一些行。

3 个答案:

答案 0 :(得分:2)

也许这就是你想要的?

SELECT GID, MID
FROM Table1 
GROUP BY GID, MID
HAVING MIN(DateEntered) >= '2015-06-13';

这是基于您的解释,而不是您的查询。

答案 1 :(得分:1)

如果&#34;后面的选择语句不存在&#34;短语有一些行,你的主要select语句导致零行。 原因是,在&#34;不存在&#34;之后,您在主选择和子选择之间没有连接。 也许你想要的是这样的:

Select * From Table1 as A 
WHERE (DateEntered >= '2015-06-13 00:00:00.000') 
AND Not exists (Select 1 From Table1 as B 
    where A.gid = B.gid and A.mid = B.mid
    And ... something else or your intersection 

您必须连接选择结果。

也许a having子句更容易:

Select gid, mid from Table1
group by gid, mid
HAVING MIN(DateEntered) >= '2015-06-13 00:00:00.000';

在having子句中,检查组(此处:gid,mid)是否满足条件。

答案 2 :(得分:0)

相关子查询,因此子查询引用外部查询中的值。

SELECT * 
FROM Table1 OuterTable1
WHERE (DateEntered >= '2015-06-13 00:00:00.000')
AND NOT EXISTS (SELECT NULL
    FROM Tabel1 InnerTable1
    WHERE InnerTable1.DateEntered < '2015-06-13 00:00:00.000'
    AND InnerTable1.GID = OuterTable1.GID
    AND InnerTable1.MID = OuterTable1.MID)