使用单个查询将ID替换为名称

时间:2016-02-27 23:06:16

标签: mysql sql join

SELECT team_with.participant1,team_with.participant2,team_with.participant3 
 FROM event,team_with 
 WHERE team_with.for_event_no=event.event_no AND 
 event.event_no=4 AND 
 team_with.participant1=9 OR 
 team_with.participant2=9 OR 
 team_with.participant3=9;

我编写了特定的查询,并连续获得了所需的ID。我无法修改此查询,以便代替这些ID,显示与ID相关联的名称。

student_detatil表包含PK(sam_id)和属性name

当前查询显示的ID是连接到student_detail.sam_id.的FK。

1 个答案:

答案 0 :(得分:0)

将存储不同参与者的列相乘似乎是一个糟糕的设计。考虑为每个参与者创建一个单独的行并将其存储在表中。你的加入逻辑也会更容易。

另外,请使用明确的JOIN语法 - 通过将连接逻辑与数据检索条件分开,使查询更清晰,更容易理解。

请注意,运算符AND的优先级高于OR,因此event.event_no = 4不适用于每个参与者条件。我认为这是一个错误,但你是判断的人。

对于查询本身,您可以将OR条件应用于连接,或者只需将student_detail表连接三次。

SELECT 
    s1.name,
    s2.name,
    s3.name
FROM 
    event e 
    INNER JOIN team_with t ON t.for_event_no = e.event_no
    LEFT JOIN student_detail s1 ON s1.sam_id = t.participant1
    LEFT JOIN student_detail s2 ON s2.sam_id = t.participant2
    LEFT JOIN student_detail s3 ON s3.sam_id = t.participant3
WHERE
    e.event_no = 4
    AND ( t.participant1=9 OR t.participant2=9 OR t.participant3=9 );