加入多个表SQL

时间:2018-01-23 21:24:34

标签: mysql sql

以下查询根据总分差异将userID与彼此匹配。我有两张桌子,调查&用户。

我需要将其加入到我拥有用户名/照片链接的用户表中。

我需要显示的列是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列匹配,因为它们对用户都是唯一的。

2 个答案:

答案 0 :(得分:0)

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

ALTER TABLE surveys
ADD COLUMN id_user REFERENCES user(id);

或相反,如果那是你想要的。不确定这是不是mysql语法。

然后您可以通过

加入表格
WHERE u.id = s.id_user

答案 1 :(得分:0)

这应该(也)是一个评论,但它有点长。

  

on a.id!= b.id

鉴于其他地方的逻辑,这意味着您将获得"调查的每个组合"上市两次。为什么不:

  

在a.id< b.id

(请注意,如果index.id上有索引,这实际上可能导致qquery变慢,而不是使用上述连接表达式时没有索引)

  

abs(a.q1 - b.q1)+ abs(a.q2 - b.q2)

因此您在同一关系中将多个值表示为不同的属性。这个不好。它打破了关于正常化的规则,让你的生活变得更加困难。 (和我们的)。

此外,在我看来,你正在添加差异的腹肌,创造了一个相当扭曲的个人之间差异的画面。

考虑:

1

在这里,根据您的计算,2个用户之间的得分为4,但我会将上述数据解释为两个用户的得分相同。这真的是你的意图吗?