Mysql 连接多个SQL表

Mysql 连接多个SQL表,mysql,sql,Mysql,Sql,以下查询根据总分差异将userID相互匹配。我有两个表,调查和用户 我需要将其连接到我拥有的具有用户名/照片链接的users表 我需要显示的列是users.name和users.photo。所有表当前都有一个唯一的userID,即users.id和survey.id,用于帮助匹配数据库中的用户 谁能帮我一把,我怎样才能完成这件事?我一直很难弄明白这一点,提前谢谢 select a.id yourId, b.id matchId, abs(a.q1 - b.q1) + abs(a.q2 - b

以下查询根据总分差异将userID相互匹配。我有两个表,调查和用户

我需要将其连接到我拥有的具有用户名/照片链接的users表

我需要显示的列是users.name和users.photo。所有表当前都有一个唯一的userID,即users.id和survey.id,用于帮助匹配数据库中的用户

谁能帮我一把,我怎样才能完成这件事?我一直很难弄明白这一点,提前谢谢

select a.id yourId, 
b.id matchId, 
abs(a.q1 - b.q1) + abs(a.q2 - b.q2) + abs(a.q3 - b.q3)+ abs(a.q4 - b.q4)+ 
abs(a.q5 - b.q5)+ abs(a.q6 - b.q6)+ abs(a.q7 - b.q7)+ abs(a.q8 - b.q8)+ 
abs(a.q9 - b.q9)+ abs(a.q10 - b.q10) scorediff
from surveys as a
inner join surveys as b on a.id != b.id
WHERE a.id=1
order by scorediff asc
目前,这是该查询的结果:

| yourID|  matchID|  scoreDiff|
----------------------------
| 5     |   2     |      14   |
| 5     |   3     |      25   |
| 5     |   1     |      33   | 
| 5     |   6     |      34   |
因此,我希望:

| yourID|  matchID|  scoreDiff| name | photo |
----------------------------------------------
| 5     |   2     |      14   | john | url
| 5     |   3     |      25   | steve| url
| 5     |   1     |      33   | jane | url
| 5     |   6     |      34   | kelly| url

matchID可以与users.ID列匹配,因为它们对用户来说都是唯一的。

添加一个带有外键约束的新列

ALTER TABLE surveys
ADD COLUMN id_user REFERENCES user(id);
或者相反,如果你想要的话。不确定这是否是mysql语法

然后,您可以通过

WHERE u.id = s.id_user
这应该是一个评论,但有点长

凭身份证!=b、 身份证

根据其他地方的逻辑,这意味着您将两次列出每个“调查”组合。为什么不:


关于a.id示例数据和预期结果,请立即提交-抱歉,请相信我。只要你坚持这个模式,你就不会有任何进展。草莓的意思是…表和字段的长度不应该是1个字符,就像变量、文件名等也是一样。。另外,如果您将字段命名为1-n,则这是错误的(不可缩放)。如果您也显示CREATETABLE语句,则会有所帮助。您好,感谢您的回复。我在身份证上使用的原因=b、 id是因为我想要所有用户的scoreDiff值,在前端我只显示5个最低的“scoreDiff”值作为可能的匹配项。基本上,我们正在做的是一项10个问题的调查,这些问题的得分是1-5分,基于某人同意的程度。然后,我们从以前的用户那里获取每个问题的绝对差异,并根据差异最小的用户列出一个“匹配”列表“它们与你的答案越接近。你的推理是有缺陷的——它仍然会导致组合返回两次。如果你在问题陈述中明确了你的目标,那会很有帮助。您确实需要规范化数据。
user     q     score
george   1     4
symcbean 1     2
george   2     2
symcbean 2     4