分组IN语句sql第2部分(否定它)

时间:2011-06-15 03:17:25

标签: sql sqlite

我想做THIS的反面。换句话说,我怎么能这样做:

SELECT * 
  FROM table1 
 WHERE col1, col2 NOT IN (SELECT col1, col2 
                            FROM table1
                           WHERE col3 < 4)

请注意NOT子句。

编辑

我正在编辑问题以解释我想要做的事情。

所以我有下表: enter image description here

请注意,每次扫描目录时,我都会输入此表中找到的文件(table1)。通过查看表我们知道我第一次扫描目录中的文件A和B.我们第二次扫描目录时我们可以说文件A和B还有一个附加文件C.我们也知道在第二个扫描文件A上进行了修改,因为它具有不同的dateModified。我对上次扫描感兴趣。从查看它我知道我们仍然有文件A,B和C,添加了文件X和修改文件B.这就是我想构建查询的原因

select * from table1 
WHERE FileID, DateModified NOT IN 
(SELECT Path, DateModified From table1 WHERE DateInserted<4) 

希望获取文件X和B,因为这些文件不在DateInserted&lt; 4的所有记录中。很抱歉没有清楚地解释我的自我。

3 个答案:

答案 0 :(得分:1)

你不喜欢我在那里的答案,我会在这里发布并添加NOT :)。

SELECT *
FROM table1 tb1
WHERE NOT EXISTS
(
    SELECT *
    FROM table1 tb2
    WHERE 
        tb1.col1 = tb2.col1 and 
        tb1.col2 = tb2.col2 and
        tb2.col3 < 4
)

就像我在那里所说的那样,查询是没有意义的,因为它等同于

SELECT *
FROM table1 tb1
WHERE tb2.col3 >= 4

[编辑] 更新基于评论:

SELECT *
FROM tableSource tb1
WHERE NOT EXISTS
(
    SELECT *
    FROM tableDestination tb2
    WHERE 
        tb1.col1 = tb2.col1 and 
        tb1.col2 = tb2.col2 and
        tb2.col3 < 4
)

答案 1 :(得分:0)

SELECT * from table1 t1, table1 t2
where t1.col3=t2.col3 and t1.COl4=t2.Col4 AND 
t1.col1!=t2.col1 and t1.COl2!=t2.Col2 and t1.col3<4

尝试上述查询

答案 2 :(得分:0)

SELECT *
FROM table1 t1
  LEFT JOIN table2 t2 ON t1.col1 = t2.col1 AND t1.col2 = t2.col2 AND t2.col3 < 4
WHERE t2.col1 IS NULL  /* col2 or col3 would do as well,
                          just like any non-nullable column would */