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。
答案 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 );