SQL查询以获取唯一列表
SQL查询以获取唯一列表
我有一个名为\'resources\'的表格。\n
机器 主机 启用 mach1 host1 TRUE mach2 host1 FALSE mach3 host1 FALSE mach4 host2 TRUE mach5 host2 TRUE
\n我想要获取所有与之关联的资源/机器的Enabled为True的主机列表。\n我尝试了以下SQL查询-\n
select distinct Host from resources where Enabled = TRUE;
\n但是这个查询给出了host1和host2作为答案,而我希望的答案只是host2。有谁可以帮我写一个可以实现这个目标的SQL查询吗?
问题:如何通过SQL查询获得唯一列表?
原因:这个问题的出现是因为在数据库中存在一些重复的数据,需要通过查询来获取唯一的数据列表。
解决方法:下面是一种解决方法,可以通过SQL查询来获取唯一列表。
SELECT DISTINCT(Host) FROM Resources WHERE Enabled = TRUE AND Host NOT IN (Select Host FROM Resources WHERE Enabled = FALSE)
另外,还可以在第二个SELECT语句的末尾添加一个LIMIT 1来优化查询的速度。
SELECT DISTINCT(Host) FROM Resources WHERE Enabled = TRUE AND Host NOT IN (Select Host FROM Resources WHERE Enabled = FALSE) LIMIT 1
这样的修改可能会使查询更快。
请尝试以上方法,并告诉我结果如何。
问题原因:用户想要实现获取唯一列表的功能,但不清楚如何编写SQL查询语句来实现。
解决方法:有两种常见的方法可以实现获取唯一列表的功能。第一种方法是使用GROUP BY子句,通过对指定列进行分组来获取唯一的值。第二种方法是使用DISTINCT关键字,直接从表中获取唯一的值。
下面是两种方法的示例查询语句:
方法一:
SELECT Host FROM resources GROUP BY Host HAVING COUNT(*) = COUNT(CASE WHEN Enabled = True THEN 1 END)
方法二:
SELECT DISTINCT Host FROM resources AS r1 WHERE Enabled = TRUE AND NOT EXISTS (SELECT 1 FROM resources AS r2 WHERE r1.Host = r2.Host AND r2.enabled = FALSE)
这两种查询语句都可以实现获取唯一列表的功能,具体使用哪种方法取决于具体情况和个人偏好。
用户询问了使用GROUP BY和DISTINCT的区别,可以在这里找到答案。用户还被告知可以接受任何有效的答案来解决问题。
最后,用户表示在所有的回答中第一个解决方案对他最有用,因此接受了这个答案。