SQL查询,用于检查结果集是否仅来自给定值

时间:2019-02-27 02:16:09

标签: sql sql-server

有没有一种好的方法可以同时检查条件的多种组合?例如,如果我有一个带有ID列的COUNTRY表和一个带有country_id列的VISITED表。我该如何检查VISITED表中的每个ID是否都是“德国”,“尼泊尔”或“巴西”的,而不是来自任何第四国家的。访问的ID必须来自这些国家/地区,然后是,否则,否。

COUNTRY
id, name
1, Germany
2, Nepal

VISITED
2
1
67

Result
NO

如果VISITED表像

VISITED
2
1

Result
YES

如果VISITED表像

VISITED
2

Result
YES

我正在使用SQL Server。

3 个答案:

答案 0 :(得分:1)

您可以尝试使用JOIN,然后在CASE WHEN中进行子查询

SELECT CASE WHEN (SELECT COUNT(ID) FROM VISITED) > COUNT(*) THEN 'NO' ELSE 'Yes' END
FROM COUNTRY c 
JOIN VISITED v on c.id = v.id

sqlfiddle

答案 1 :(得分:1)

如果我的理解正确,那么您想定义一些要检查的国家/地区。该集合可以是国家/地区列表的子集。如果所有访问的ID都来自该组国家/地区,则结果应为 YES ,否则结果应为 NO 。或反之,如果VISITED包含不在此集合中的任何ID,则结果应为 NO YES 。在这里,该集合在查询中定义为 GermanyId,Nepalid,BrazilId

select case when exists 
     (select id from VISITED where id not in (GermanyId, NepalId, BrazilId))
     then 'NO' else 'YES' end

那是你的追随吗?

答案 2 :(得分:1)

一种变体是使用LEFT JOIN并检查Visited中是否有不匹配的行。

SELECT
    CASE WHEN EXISTS
    (
        SELECT 1
        FROM
            Visited
            LEFT JOIN Country ON Country.ID = Visited.CountryID
        WHERE
            Country.ID IS NULL
    )
    THEN 'NO' 
    ELSE 'YES' 
    END AS Result
;