表Sqlite3中的唯一选择查询

时间:2015-07-30 17:34:54

标签: sql join sqlite

我有以下数据库结构

Table 1
EventID  |  Person1  |  Person2  | Person3  |  ...  | PersonN

Table 2
Person  |  Height  |  Weight

现在,我希望查询给定的EventID(唯一的)会返回相关人员及其HeightWeight

我正在考虑按照

的方式创建某种临时表
CREATE TEMP TABLE t AS
SELECT Person1, Person2, Person3, ..., PersonN FROM Table1 WHERE EVENTID = ?

然后将临时表ttable2一起加入,但当然这并不像我想要的那样是t的转置。

我将如何做到这一点?

2 个答案:

答案 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