我的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脚本,但我有一个想法直接在数据库中解决它。 我对一些内部联接,不同查询等不成功。
所以如果有人能伸出援助之手,我将非常高兴。
提前致谢:)
答案 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;