我正在尝试在SQL Server中创建一个查询,该查询将搜索表中的所有数字组合。
COMBINATION TABLE
CombID Comb_Num1 Comb_NumTwo Comb_NumThree
1 1 2 3
2 2 10 15
3 5 20 60
4 10 22 50
5 22 33 46
数字范围为1-60,组合中不重复相同的数字。订单无关紧要。
输入表
EntryID NumberOne NumberTwo NumberThree NumberFour NumberFive
1 10 22 33 46 50
2 2 10 15 22 40
3 24 33 40 45 50
4 5 10 22 40 60
5 2 6 10 22 40
6 2 10 22 50 60
7 10 22 33 46 50
数字范围为1-60,并且在条目中不会重复相同的数字。订单无关紧要。
结果
查询还应该为组合表中的每条记录显示它在Entry表中出现的次数。它应该排除条目表中没有出现的组合。
答案 0 :(得分:6)
尝试:
select distinct e.EntryID
from entry e, combination c
where c.Comb_Num1 in (e.NumberOne, e.NumberTwo, e.NumberThree, e.NumberFour, e.NumberFive)
and c.Comb_Num2 in (e.NumberOne, e.NumberTwo, e.NumberThree, e.NumberFour, e.NumberFive)
and c.Comb_Num3 in (e.NumberOne, e.NumberTwo, e.NumberThree, e.NumberFour, e.NumberFive)
and c.CombID = @CombID
- 返回特定@CombID的匹配条目
答案 1 :(得分:0)
蛮力会这样做:
SELECT EntryID
FROM combinations
INNER JOIN entries ON
(Comb_Num1=NumberOne AND Comb_NumTwo=NumberTwo AND Comb_NumThree=NumberThree)
OR (Comb_Num1=NumberTwo AND Comb_NumTwo=NumberThree AND Comb_NumThree=NumberFour)
OR (Comb_Num1=NumberThree AND Comb_NumTwo=NumberFour AND Comb_NumThree=NumberFive)
WHERE CombID=<whatever>
这一点可以考虑到你不想要的订单。要解决此问题,您要创建另一个表(一次创建),对于Comb_Num1,CombNumTwo和CombNumThree的所有排列具有相同的CombID,或者以相同的方式扩展疯狂连接条件。这是作为练习留给读者的。