我需要查询以从数字组中提供不同数量的选择

时间:2016-08-18 11:28:52

标签: mysql sql

我的桌子上有八个号码。我需要返回28种不同的组合。我以为我的代码是正确的,但它返回了无数个组合。

这是代码。

SELECT t1.ID AS Number_1,
       t2.ID AS Number_2,
       t3.ID AS Number_3,
       t4.ID AS Number_4,
       t5.ID AS Number_5,
       t6.ID AS Number_6
  FROM cTop8 AS t1,
       cTop8 as t2,
       cTop8 as t3,
       cTop8 as t4,
       cTop8 as t5,
       cTop8 as t6
 where t2.id <> t1.id
   and t3.id <> t2.id
   AND t3.id <> t1.id
   and t4.id <> t3.id
   AND t4.id <> t2.id
   AND t4.id <> t1.id
   and t5.id <> t4.id
   AND t5.id <> t3.id
   AND t5.id <> t2.id
   AND t5.id <> t1.id
   and t6.id <> t5.id
   AND t6.id <> t4.id
   AND t6.id <> t3.id
   AND t6.id <> t2.id
   AND t6.id <> t1.id
 ORDER BY rand()

2 个答案:

答案 0 :(得分:0)

您可以使用LIMIT将结果限制为28种组合,并使用NOT IN()使代码更具可读性:

SELECT t1.ID AS Number_1,
       t2.ID AS Number_2,
       t3.ID AS Number_3,
       t4.ID AS Number_4,
       t5.ID AS Number_5,
       t6.ID AS Number_6
  FROM cTop8 AS t1,
       cTop8 as t2,
       cTop8 as t3,
       cTop8 as t4,
       cTop8 as t5,
       cTop8 as t6
where t1.id NOT IN(t2.id,t3.id,t4.id,t5.id,t6.id)
   AND t2.id NOT IN(t3.id,t4.id,t5.id,t6.id)
   AND t3.id NOT IN(t4.id,t5.id,t6.id)
   AND t4.id NOT IN(t5.id,t6.id)
   AND t5.id <> t6.id
ORDER BY rand() LIMIT 28;

答案 1 :(得分:0)

我想你想要这个:

SELECT t1.ID AS Number_1,
       t2.ID AS Number_2,
       t3.ID AS Number_3,
       t4.ID AS Number_4,
       t5.ID AS Number_5,
       t6.ID AS Number_6
FROM cTop8 t1 JOIN
     cTop8 t2
     ON t1.id < t2.id JOIN
     cTop8 t3
     ON t2.id < t3.id JOIN
     cTop8 t4
     ON t3.id < t4.id JOIN
     cTop8 t5
     ON t4.id < t5.id JOIN
     cTop8 t6
     ON t5.id < t6.id;

如果您想要28,那么您可以添加LIMIT 28。如果你想要它们是随机的:

SELECT t1.ID AS Number_1,
       t2.ID AS Number_2,
       t3.ID AS Number_3,
       t4.ID AS Number_4,
       t5.ID AS Number_5,
       t6.ID AS Number_6
FROM cTop8 t1 JOIN
     cTop8 t2
     ON t1.id < t2.id JOIN
     cTop8 t3
     ON t2.id < t3.id JOIN
     cTop8 t4
     ON t3.id < t4.id JOIN
     cTop8 t5
     ON t4.id < t5.id JOIN
     cTop8 t6
     ON t5.id < t6.id
ORDER BY rand()
LIMIT 28;