首先,我想抛出我对 SQL 还很陌生。
假设您有一个包含 x 和 y 列的表,其中两者都是正整数。
问题一:
查找所有值是否存在指定y
值的最佳方法是什么?i
x
问题2:
查找一组大小为 p 的值中的每个值是否存在指定y
值的最佳方法是什么?i
x
x
我找到了一种方法,我在第一种情况下进行 n 次自我连接,在第二种情况下进行 p 次自我连接。但我很好奇实现这一目标的更好方法。
一个示例表:
x,y
---
1,a
1,b
2,a
3,b
3,c
首先,我想抛出我对 SQL 还很陌生。
假设您有一个包含 x 和 y 列的表,其中两者都是正整数。
问题一:
查找所有值是否存在指定y
值的最佳方法是什么?i
x
问题2:
查找一组大小为 p 的值中的每个值是否存在指定y
值的最佳方法是什么?i
x
x
我找到了一种方法,我在第一种情况下进行 n 次自我连接,在第二种情况下进行 p 次自我连接。但我很好奇实现这一目标的更好方法。
一个示例表:
x,y
---
1,a
1,b
2,a
3,b
3,c
您的怀疑是正确的:使用一堆连接是非常低效的。
这是有效的方法:
问题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)