我有以下数据库结构
Table 1
EventID | Person1 | Person2 | Person3 | ... | PersonN
Table 2
Person | Height | Weight
现在,我希望查询给定的EventID
(唯一的)会返回相关人员及其Height
和Weight
。
我正在考虑按照
的方式创建某种临时表CREATE TEMP TABLE t AS
SELECT Person1, Person2, Person3, ..., PersonN FROM Table1 WHERE EVENTID = ?
然后将临时表t
与table2
一起加入,但当然这并不像我想要的那样是t
的转置。
我将如何做到这一点?
答案 0 :(得分:0)
select t2.person, t2.height, t2.weight
from table2 t2
join
(select person1 as person,event_id as person from table1
union select person2,event_id from table1..
select personN,event_id from table1) t3
on t3.person = t2.person
where t3.event_id = ?
这是我能想到的更通用的方法。但正如评论中提到的那样,您应该考虑更改表格结构。
答案 1 :(得分:0)
如果您获得了活动ID,则可以使用exists
:
select t2.*
from table2 t2
where exists (select 1
from table1 t1
where t2.person in (t1.person1, t1.person2, t1.person3) and
t1.eventid = $eventid
);
但是,您的数据结构不太适合扩展目的。问题数据结构将有一个EventPersons
表,其中一列为EventId
,另一列为PersonId
。