SQLITE - 测试从 SELECT 返回的所有行是否对特定列具有相同的值
SQLITE - Test if all rows returned from a SELECT have the same value for a particular column
我有以下table
id || foo
-------------
1 || a
2 || b
3 || b
4 || b
5 || c
6 || a
7 || d
给定一个 ID 列表,我如何测试所有这些记录是否具有相同的 foo
值?
例如
在 (2,3,4) 中选择 id 应该可以通过测试
在 (2,3) 中选择 id 应该可以通过测试
在 (1,6) 中选择 id 应该可以通过测试
在 (5,6) 中选择 ID 应该无法通过测试
在 (1,2) 中选择 ID 应该无法通过测试
(请注意,我没有立即拥有要测试的“foo”值,因此例如使用(2,3,4)我不知道要测试“b”,但没有什么可以停止我使用第一个 id=2 来获取要测试的“b”值)
如果列 foo
不可为空,您可以使用聚合来实现:
SELECT MIN(foo) = MAX(foo) AS result
FROM tablename
WHERE id IN (?, ?, ....);
或:
SELECT COUNT(DISTINCT foo) = 1 AS result
FROM tablename
WHERE id IN (?, ?, ....);
两个查询都将 return 1 行 1 列,值 1
表示结果集的所有行(在 table 被过滤后)包含相同的值在 foo
列中。
参见demo。
我有以下table
id || foo
-------------
1 || a
2 || b
3 || b
4 || b
5 || c
6 || a
7 || d
给定一个 ID 列表,我如何测试所有这些记录是否具有相同的 foo
值?
例如
在 (2,3,4) 中选择 id 应该可以通过测试
在 (2,3) 中选择 id 应该可以通过测试
在 (1,6) 中选择 id 应该可以通过测试
在 (5,6) 中选择 ID 应该无法通过测试
在 (1,2) 中选择 ID 应该无法通过测试
(请注意,我没有立即拥有要测试的“foo”值,因此例如使用(2,3,4)我不知道要测试“b”,但没有什么可以停止我使用第一个 id=2 来获取要测试的“b”值)
如果列 foo
不可为空,您可以使用聚合来实现:
SELECT MIN(foo) = MAX(foo) AS result
FROM tablename
WHERE id IN (?, ?, ....);
或:
SELECT COUNT(DISTINCT foo) = 1 AS result
FROM tablename
WHERE id IN (?, ?, ....);
两个查询都将 return 1 行 1 列,值 1
表示结果集的所有行(在 table 被过滤后)包含相同的值在 foo
列中。
参见demo。