【发布时间】:2015-07-30 17:34:53
【问题描述】:
我有以下数据库结构
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 的转置。
我该怎么做呢?
【问题讨论】:
-
考虑将
Table1标准化为EventID | PersonIndex (if even needed) | Person -
同意,不确定这是否会是一个新问题,但我该怎么做呢?
-
您可以为每个人插入一行
EventID, Person,而不是插入一行EventID, P1, P2, P3, ...(这很难查询并限制与事件相关的人数)。然后查询变得微不足道:SELECT Table2.* FROM Table1 INNER JOIN Table2 ON Table1.Person = Table2.Person WHERE Table1.EventID = ? -
对,我的意思是有没有一种很好的方法来规范化我的表,使用 SQL(不是在插入阶段)?
-
INSERT INTO NewTable SELECT EventID, Person1 FROM OldTable WHERE Person1 IS NOT NULL UNION ALL SELECT EventID, Person2 FROM OldTable WHERE Person2 IS NOT NULL UNION ALL ...不漂亮,但你只需要做一次。