2014-12-08 3 views
0

У меня есть SQL-запрос, который я пытаюсь, я уверен, это легко, но я не настолько хорошо разбираюсь, поэтому не могу понять. Даже не был уверен, как сформулировать вопрос. Во всяком случае вот что я смотрю на:SQL условный запрос

У меня есть таблица, которая имеет следующие столбцы: Hostname, путь, имя файла, Размер файла

По существу, это список каталогов ряда компьютеров (имен хостов).

Что я хочу получить, это список отдельных имен хостов, где ни один из двух путей не существует для этого хоста. Например, возьмите все имена хостов, которые не имеют соответствующего каталога C: \ users \ Jeff или C: \ users \ Mary. Если у них есть один из двух, опустите. Верните их только в том случае, если ни один из этих каталогов не существует.

Любая помощь будет высоко оценена. Благодаря!!

+2

Пожалуйста, покажите, что вы уже пробовали, мы не здесь, чтобы сделать свою домашнюю работу для вас. Вы должны сделать попытку, тогда мы покажем вам, где вы поступили не так, и вот как вы учитесь. – Barmar

+3

Кроме того, добавьте тег для используемых вами РСУБД. Различные базы данных предоставляют разные способы выполнения такого рода запросов. – Barmar

+0

Даже если у вас возникли проблемы с оператором SQL, покажите нам архитектуру таблицы. Это то, что мы все привыкли видеть, и я думаю, что это более очевидно. Теперь все отправленные запросы имеют разные типы имен столбцов и таблицы. – tvCa

ответ

2

Я рекомендовал бы разделить этот на две части:

  1. Сформировав список всех имен хостов.
  2. Создайте список всех имен хостов, которые содержат путь, который вы не хотите.

Затем используйте MINUS (который автоматически удаляет дубликаты), чтобы получить уникальные результаты:

SELECT hostname 
FROM table 
MINUS 
SELECT hostname 
FROM table 
WHERE path IN ('/search/path/one', '/search/path/two') 

Вы также можете использовать анти-объединение вместо MINUS, но я оставлю это до вы.

+0

Отлично. Я вижу, что использование MINUS очень полезно. Не знал, что он существует (как я уже сказал, очень новый для SQL) - Спасибо! – DJMcCarthy12

+0

'MINUS' /' EXCEPT' удаляет дубликаты, поэтому 'DISTINCT' не нужны. –

+0

@MartinSmith - Хорошая точка. Второй 'DISTINCT' не требуется. Если имя хоста появляется во втором запросе несколько раз, оно будет удалено только один раз. –

4

Один из способов

SELECT HostName 
FROM YourTable 
GROUP BY HostName 
HAVING COUNT(CASE WHEN Path IN ('C:\users\Jeff', 
           'C:\users\Mary') THEN 1 END) =0; 
1
select distinct hostname from your_table t1 
where not exists (select 1 from your_table t2 
        where t2.hostname = t1.hostname 
        and t2.path in ('C:\users\Jeff', 'C:\users\Mary')); 
Смежные вопросы