【发布时间】:2011-12-13 20:41:34
【问题描述】:
我有 3 张桌子
person (id, name)
area (id, number)
history (id, person_id, area_id, type, datetime)
在此表中,我存储了在特定时间哪个人拥有哪个区域的信息。这就像一个推销员在一个地区旅行了一段时间,然后他得到了另一个地区。他也可以同时拥有多个区域。
历史记录类型 = 'I' 代表 CheckIn 或 'O' 代表 Checkout。 示例:
id person_id area_id type datetime
1 2 5 'O' '2011-12-01'
2 2 5 'I' '2011-12-31'
A person started traveling in area 5 at 2011-12-01 and gave it back on 2011-12-31.
现在我想要一份所有人现在拥有的所有区域的列表。
person1.name, area1.number, area2.number, area6.name
person2.name, area5.number, area9.number
....
输出也可以是这样的(没关系):
person1.name, area1.number
person1.name, area2.number
person1.name, area6.number
person2.name, area5.number
....
我该怎么做?
【问题讨论】:
-
所以您要查找当前已签出某个区域但尚未重新签入的人员列表?
-
我个人建议不要将
type存储为char值(或至少,它是孤独的)- 将其存储为对详细说明该值的表的 fk 引用 意味着(例如您的person和area表)。这将条目限制为有效值,可以(轻松)随时更新,而无需alter语句......除其他外。 -
可能历史示例数据第二行中的 id = 1 是错字,应该是 2 或其他数字?
-
@JonathanLeffler:你是对的。我修好了。