Mysql SQL:如何为每个对象选择一对重复次数有限的表对象?
我想找到不同的问题对,但每个问题在所有结果对中最多重复几次(比如5次,这并不重要) 我有一个问题表,根据它本身的笛卡尔积,第一个位置的每一个问题至少与所有其他问题重复 我怎样才能限制结果,找到每个问题都重复几次的问题对 主表如下所示: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
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我想他指的是笛卡尔积。