SQL根据与其他表

时间:2016-10-07 20:38:03

标签: sql join

我有两个表:votessubmissionsvotes存储所有收到的投票(每个人可以进行第一和第二次投票),submissions包含人们可以投票的项目。每个项目都有自己的ID。 votes表存储每个投票的ID。我想检索人们投票的项目的名称。这是表格的示例:

votes:

**voter** | **vote1_ID** | **vote2_ID**
   Foo    |       1      |       2
   Bar    |       3      |       2
   Mark   |       2      |       3

submissions:

**ID** | **name**
   1   |   John
   2   |   Jane
   3   |   Mary

我已经说过,我想在一个查询中检索与第一个投票相关联的名称和与第二个投票相关联的名称(事实上,我并不真正关心需要多少查询,而是单个查询查询总是更好,更清洁当然)。我将如何继续这样做?我已经尝试过我需要使用连接,但我无法弄清楚如何从同一列中检索两次值。

编辑:我想举例说明我尝试执行的查询可能有用:

例如,如果我想查看Bar投票的内容,则查询结果应为submissions.name两次。在马克的结果中,这是简和玛丽。

3 个答案:

答案 0 :(得分:2)

您可以执行两个内部联接以选择单独的值。

SELECT s1.name, s2.name 
FROM votes v
INNER JOIN submissions s1 ON v.vote1_ID = s1.ID
INNER JOIN submissions s2 ON v.vote2_ID = s2.ID

答案 1 :(得分:1)

您必须两次join提交表以获得预期结果。

select v.voter, s1.name, s2.name 
from votes v 
join submissions s1 on v.vote1_id = s1.id
join submissions s2 on v.vote2_id = s2.id

答案 2 :(得分:0)

如果你想要行而不是列,你可以做两个连接并将它们组合在一起:

select v.voter, s1.name
from votes v 
join submissions s1 on v.vote1_id = s1.id
UNION ALL
select v.voter, s2.name
from votes v 
join submissions s2 on v.vote2_id = s2.id