SQL级嵌套SELECT

时间:2016-04-10 14:23:01

标签: sql sqlite

我的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
 ..............................................   

现在我想选择Country,ServerID和Application,其中至少有一个实例无效。所以输出应该是:

Country     ServerID     Application
  usa          ABC1       Mailserver
  usa          ABC1       LDAPserver
  usa          ABC1       Voiceserver
 canada        BCA2       Voiceserver

我已经为类似的问题制作了一些ruby脚本,但我有一个想法直接在数据库中解决它。 我对一些内部联接,不同查询等不成功。

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

提前致谢:)

3 个答案:

答案 0 :(得分:0)

我会使用聚合:

select Country, ServerID, Application
from t
group by Country, ServerID, Application
having sum(case when validation = 0 then 1 else 0 end) > 0;

这会计算validation = 0> 0确保至少有一行的行数。

假设验证是一个只有0和1的数字,你也可以这样做:

having sum(validation) < count(*)

或者:

select distinct Country, ServerID, Application
from t
where validation = 0;

答案 1 :(得分:0)

这样做怎么样?

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

答案 2 :(得分:0)

条目失败的组具有最小的validation值,因此您只需使用MIN():

SELECT Country, ServerID, Application
FROM MyTable
GROUP BY Country, ServerID, Application
HAVING MIN(validation) = 0;