1

首先,我想抛出我对 SQL 还很陌生。

假设您有一个包含 x 和 y 列的表,其中两者都是正整数。

问题一:

查找所有值是否存在指定y值的最佳方法是什么?ix

问题2:

查找一组大小为 p 的值中的每个值是否存在指定y值的最佳方法是什么?ixx

我找到了一种方法,我在第一种情况下进行 n 次自我连接,在第二种情况下进行 p 次自我连接。但我很好奇实现这一目标的更好方法。

一个示例表:

x,y
---
1,a
1,b
2,a
3,b
3,c
4

1 回答 1

1

您的怀疑是正确的:使用一堆连接是非常低效的。
这是有效的方法:

问题1:如果前提为真,这两个值将相同

select 
    (select count(distinct x) from t1 where y = '1') as x_count_with_y,
    (select count(distinct x) from t1) as x_count 

问题2:如果前提为真,这个值将与集合中x的个数相同

select count(distinct x)
from t1
where y = '1'
and x in (1,2,3,5,8)
于 2012-05-09T17:30:22.023 回答