Mysql SQL:如何为每个对象选择一对重复次数有限的表对象?

Mysql SQL:如何为每个对象选择一对重复次数有限的表对象?,mysql,sql,Mysql,Sql,我想找到不同的问题对,但每个问题在所有结果对中最多重复几次(比如5次,这并不重要) 我有一个问题表,根据它本身的笛卡尔积,第一个位置的每一个问题至少与所有其他问题重复 我怎样才能限制结果,找到每个问题都重复几次的问题对 主表如下所示: id question 1 q1 2 q2 3 q3 4 q4 通过笛卡尔积,我实现了 id1 question1 id2 question2 1 q1 2 q2 1 q1 3

我想找到不同的问题对,但每个问题在所有结果对中最多重复几次(比如5次,这并不重要)

我有一个问题表,根据它本身的笛卡尔积,第一个位置的每一个问题至少与所有其他问题重复

我怎样才能限制结果,找到每个问题都重复几次的问题对

主表如下所示:

id  question
1   q1
2   q2
3   q3
4   q4
通过笛卡尔积,我实现了

id1   question1  id2   question2
1     q1         2     q2
1     q1         3     q3
1     q1         4     q4
.
.
.
但我只是想

id1   question1  id2   question2
1     q1         2     q2
3     q3         4     q4
(第一季度不再重复)


提前感谢

如果Id是连续序列(无孔),您可以将一个偶数Id与一个奇数Id配对

 SELECT *
 FROM question Q1
 JOIN question Q2 
   ON Q1.ID = Q2.ID -1
 WHERE 
   Q1.ID % 2 <> 0

如果Id是连续序列(无孔),则可以将一个偶数Id与一个奇数Id配对

 SELECT *
 FROM question Q1
 JOIN question Q2 
   ON Q1.ID = Q2.ID -1
 WHERE 
   Q1.ID % 2 <> 0

您需要少量的随机问题对,比N**2小得多。计算笛卡尔叉积,随机洗牌,并产生前几行

select *  from crossproduct  order by sha1(qid1 + ',' + qid2)  limit 10;
假设此设置:

drop table  if exists  posts;
create table posts (
  id     integer  primary key  auto_increment,
  body   varchar(80)
);

drop view  if exists  crossproduct;
create view crossproduct as
select p1.id as qid1, p1.body as question1,
       p2.Id as qid2, p2.Body as question2
from   posts p1, posts p2
where  p1.id != p2.id
;

要重新洗牌,请使用
sha1(qid1+',1',+qid2)
,或
,2,
,…

您需要少量的随机问题对,数量比N**2小得多。计算笛卡尔叉积,随机洗牌,并产生前几行

select *  from crossproduct  order by sha1(qid1 + ',' + qid2)  limit 10;
假设此设置:

drop table  if exists  posts;
create table posts (
  id     integer  primary key  auto_increment,
  body   varchar(80)
);

drop view  if exists  crossproduct;
create view crossproduct as
select p1.id as qid1, p1.body as question1,
       p2.Id as qid2, p2.Body as question2
from   posts p1, posts p2
where  p1.id != p2.id
;

要重新洗牌,请使用
sha1(qid1+',1',+qid2)
,或
,2,
,…

请回答您的问题,并根据该数据添加一些和预期输出。请您的问题-不要在评论中发布代码或附加信息。您使用的是哪种产品?博士后?神谕“SQL”只是一种查询语言,而不是特定数据库产品的名称。“乘法”不是我与表上的行关联的操作。什么查询生成您正在获得的结果。从帖子p1,帖子p2中选择p1.Id作为qid1,p1.Body作为问题1,p2.Id作为qid2,p2.Body作为问题2。Id@GordonLinoff我想他指的是笛卡尔积。请回答你的问题,并根据这些数据添加一些和预期的输出。请您的问题-不要在评论中发布代码或附加信息。您使用的是哪种产品?博士后?神谕“SQL”只是一种查询语言,而不是特定数据库产品的名称。“乘法”不是我与表上的行关联的操作。什么查询生成您正在获得的结果。从帖子p1,帖子p2中选择p1.Id作为qid1,p1.Body作为问题1,p2.Id作为qid2,p2.Body作为问题2。Id@GordonLinoff我想他指的是笛卡尔积。