有没有一种好的方法可以同时检查条件的多种组合?例如,如果我有一个带有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。
答案 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
答案 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
;