Запрос, который возвращает данные, не найденные в таблице - PullRequest
0 голосов
/ 02 мая 2019

Есть ли способ сделать через прямой запрос то, что я предлагаю?Я хочу, чтобы запрос возвращал имя хоста, которого нет в таблице, при поиске по ключевому слову IN.

select * from cpus_view where hostname in ('HostnameEXIST', 'hostnameNOEXIST')

Я хочу сделать запрос, который возвращает HostnameNOEXITS, то естьтот, который не существует в таблице vista_cpus

Знаете ли вы, как сделать прямой запрос, и вам не нужно ничего делать с хранимой процедурой и т. д.?

Ответы [ 3 ]

1 голос
/ 02 мая 2019

Используйте ваш список в качестве набора данных, а затем left join вашу таблицу:

SELECT v.hostname, c.Column1, c.Column2 --etc
FROM (
    VALUES
        ('HostnameEXIST'),
        ('hostnameNOEXIST')
) v(hostname)
    LEFT JOIN cpus_view c ON c.hostname = v.hostname
-- WHERE c.hostname IS NULL -- Activate this condition if you need only "hostnameNOEXIST" values
1 голос
/ 02 мая 2019

Один способ - с использованием производной таблицы и конструкторов строк:

SELECT hostnames.hostname
FROM (VALUES('HostnameEXIST'), ('hostnameNOEXIST')) AS hostnames(hostname)
WHERE NOT EXISTS(
    SELECT 1
    FROM cpus_view 
    WHERE cpus_view.hostname = hostnames.hostname
);
0 голосов
/ 02 мая 2019

Вы можете использовать объединение, а затем отфильтровывать записи без совпадений.

SELECT * FROM cpus_view AS A
    LEFT JOIN vista_cpus AS B ON A.hostname = B.hostname
        WHERE A.hostname IN ('HostnameEXIST','hostnameNOEXIST') AND B.hostname IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...