查询返回表中找不到的数据

时间:2019-05-02 09:50:29

标签: sql-server

有什么办法可以通过直接查询我建议的内容吗? 当我通过IN关键字搜索时,我希望查询返回表中不存在的主机名。

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

我想进行查询以返回HostnameNOEXITS,这是表vista_cpus中不存在的查询

您知道如何执行直接查询,而不必执行任何存储过程类型等操作吗?

3 个答案:

答案 0 :(得分:1)

一种方法是使用派生表和行构造函数:

SELECT hostnames.hostname
FROM (VALUES('HostnameEXIST'), ('hostnameNOEXIST')) AS hostnames(hostname)
WHERE NOT EXISTS(
    SELECT 1
    FROM cpus_view 
    WHERE cpus_view.hostname = hostnames.hostname
);

答案 1 :(得分:1)

将您的列表用作数据集,然后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

答案 2 :(得分:0)

您可以使用联接,然后过滤出不匹配的记录。

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