MySQL думаю, что мне нужно использовать ROLLUP, но я не уверен - PullRequest
2 голосов
/ 27 апреля 2011

Если у меня есть идентификаторы группы людей (12,34,54,65) и база данных с ключами (например, пол, возраст, зарплата), например:

Таблица подробностей

{Person ID,   Key,    Value}
{12,           Gender,  Male}
{34,           Age,     40}
{54,           Salary,  30000}

Табель персонала

ID
12
34
54
65

Я хочу создать строки, состоящие из powerset {12,34,54,65} x {Age,Salary,Gender}, независимо от того, есть ли значение данных в таблице Details

Ответы [ 2 ]

3 голосов
/ 27 апреля 2011

Вам не нужно сводить, вам нужно повернуть таблицу -

SELECT p.id, d.gender, d.age, d.salary FROM personnel p
  JOIN (
    SELECT person_id,
      MAX(IF(`key` = 'gender', `value`, NULL)) AS gender,
      MAX(IF(`key` = 'age', `value`, NULL)) AS age,
      MAX(IF(`key` = 'Salary', `value`, NULL)) AS salary
    FROM
      details
    GROUP BY
      person_id) d
    ON p.id = d.person_id;
0 голосов
/ 27 апреля 2011

Полагаю, то, что вы ищете, просто старое:

select * from personnel p, details d where d.person_id = p.person_id

Но этот стол details пахнет для меня как принципиально сломанный дизайн.К какому типу относится столбец value?Строка?и он хранит строки, целые числа и значения валют?Удачи с этим.Я надеюсь, что вы на самом деле не хотите ИСПОЛЬЗОВАТЬ какие-либо из этих данных, не говоря уже о поиске по ним.

РЕДАКТИРОВАТЬ: Нет ... Теперь я думаю, что Devart на местеЯ не поняла вопрос.Вздох.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...