оператор IN группировки SQL часть 2 (отрицая его) - PullRequest
2 голосов
/ 15 июня 2011

Я бы хотел сделать противоположное ЭТОМ .Другими словами, как я могу сделать что-то вроде:

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

Обратите внимание на предложение NOT.

РЕДАКТИРОВАТЬ

Я редактирую вопрос, чтобы объяснить, что я пытаюсь сделать.

, поэтому у меня есть следующая таблица: enter image description here

noteчто каждый раз, когда я сканирую каталог, я ввожу файлы, которые были найдены в этой таблице (таблица1).Глядя на таблицу, мы знаем, что в первый раз, когда я сканирую каталог там, где находятся файлы A и B. Во второй раз, когда мы сканируем каталог, мы можем сказать, что файлы A и B, где еще есть файл с дополнительным файлом C., мы также знаем, чтово время второго сканирования файл A был изменен, поскольку он имеет другую датуModified.Я заинтересован в последнем сканировании.Глядя на это, я знаю, что у нас все еще есть файлы A, B и C с добавлением файла X и изменением файла B. Вот почему я хотел построить запрос

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

в надежде получить файлыX и B, потому что это файлы, которые не во всех записях с DateInserted <4.Извините за то, что не объяснил себя сам.</p>

Ответы [ 3 ]

1 голос
/ 15 июня 2011

Вам не понравился мой ответ, я опубликую его здесь и добавлю 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

[EDIT] Обновление основано на комментарии:

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
)
0 голосов
/ 15 июня 2011
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 */
0 голосов
/ 15 июня 2011
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

Попробуйте запрос выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...