我有以下两个表,第二个表包含第一个表的每个条目的动态数量的属性:
people:
_id | name | first | status
----------------------------------
1 | Smtih | Sam | on
2 | Doe | Joe | off
constraints: some people may have no more than in people, some may have 20:
_id | persid | type | value
-------------------------------------------------
1 | 2 | IQ | 90
2 | 2 | bold | yes
... | ... | ... | ...
作为中间结果,我想得到这个:
_id | name | first | status | IQ | bold | ...
------------------------------------------------ ... more depending on person
2 | Doe | Joe | off | 90 | yes | ...
这样我最终可以选择具有特定属性的项目,例如:
`SELECT * FROM< - 上表 - > WHERE status ='off'和IQ> '75'
如果那些没有正确属性(在这种情况下是IQ)的人甚至不会出现在中间表中(更快?),我会没事的。
可悲的是,我在自己的微弱尝试中并没有走得太远。我想GROUP_CONCAT
应该发挥作用,但无法让它发挥作用。
一如既往,感谢你们提前花时间和精力!
答案 0 :(得分:0)
正如塞尔文所写,如果你知道所有类型,你就可以生成一个查询。但是如果按时间添加属性,则需要两个查询。以下代码中包含IQ
的最后一部分将无效,因为IQ
不是列。
SELECT * FROM <--the above table--> WHERE status = 'off' AND IQ > '75'
首先,您需要获取固定信息。
SELECT _id, name, first, status ...
你可以选择(例如通过IQ):
SELECT _id, name, first, status FROM wherever WHERE (SELECT value FROM attributes WHERE persid = _id AND type='IQ') > 75
最后,对于每个选定的记录,您需要获取属性。
SELECT value FROM attributes WHERE presid=_id_given_by_program