SQL级别嵌套选择

SQL级别嵌套选择,sql,sqlite,Sql,Sqlite,我有点被SQLite3查询卡住了。 在下表中,我只想选择无效的行。 表包含不同国家/地区的服务器,每个服务器可以包含应用程序实例的数量。每个应用程序实例可以是有效的(例如,成功检查等等),也可以是无效的(如果控制出错) 我的桌子是这样的: Country ServerID Application Validation usa ABC1 Mailserver 1 usa ABC1 Mai

我有点被SQLite3查询卡住了。 在下表中,我只想选择无效的行。 表包含不同国家/地区的服务器,每个服务器可以包含应用程序实例的数量。每个应用程序实例可以是有效的(例如,成功检查等等),也可以是无效的(如果控制出错)

我的桌子是这样的:

Country     ServerID     Application     Validation
  usa          ABC1       Mailserver           1
  usa          ABC1       Mailserver           1
  usa          ABC1       Mailserver           0
  usa          ABC1       LDAPserver           0
  usa          ABC1       Voiceserver          0
  usa          ABC2       Voiceserver          1
 canada        BCA1       Mailserver           1
 canada        BCA2       LDAPserver           1
 canada        BCA2       Voiceserver          0
 ..............................................   
现在我想选择至少有一个实例无效的国家、服务器ID和应用程序。因此,输出应为:

Country     ServerID     Application
  usa          ABC1       Mailserver
  usa          ABC1       LDAPserver
  usa          ABC1       Voiceserver
 canada        BCA2       Voiceserver
我已经为类似的问题编写了一些ruby脚本,但我有一个直接在数据库中解决它的想法。 我对一些内部连接、不同的查询等都不满意

所以,如果有人能伸出援助之手,我将非常高兴


提前感谢:)

我会使用聚合:

select Country, ServerID, Application
from t
group by Country, ServerID, Application
having sum(case when validation = 0 then 1 else 0 end) > 0;
这将统计
验证=0
>0
确保至少有一行的行数

假设验证是一个仅接受0和1的数字,则还可以执行以下操作:

having sum(validation) < count(*)

这么做怎么样

select distinct Country, ServerID, Application
from table
where Validation = 0

条目失败的组具有最小的
验证
值,因此您可以使用MIN()

select distinct Country, ServerID, Application
from table
where Validation = 0
SELECT Country, ServerID, Application
FROM MyTable
GROUP BY Country, ServerID, Application
HAVING MIN(validation) = 0;