Как создать два столбца вывода из одного столбца - PullRequest
2 голосов
/ 19 февраля 2012

Я предполагаю, что это нубский вопрос, поэтому, пожалуйста, потерпите меня. У меня есть столбец в таблице MySQL, который содержит как имя, так и фамилию, а также другие данные (см. Таблицу ниже).

fid | uid | value
 5  |  1  | John
 6  |  1  | Doe
 7  |  1  | some other data
 5  |  2  | Jane
 6  |  2  | Doe
 7  |  2  | some other data

Что я хотел бы сделать, это создать запрос, в котором я разделил имя и фамилию на их собственные столбцы для целей отчетности (как показано ниже).

First Name | Last Name
  John     |   Doe
  Jane     |   Doe

Я не видел здесь ранее заданного вопроса и не мог найти Google (возможно, с использованием неправильных ключевых слов). Я предполагаю, что это относительно просто, но это ускользает от меня.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 19 февраля 2012

Самостоятельное объединение не обязательно:

  SELECT MAX(CASE WHEN yt.fid = 5 THEN yt.value ELSE NULL END) AS firstname,
         MAX(CASE WHEN yt.fid = 6 THEN yt.value ELSE NULL END) AS lastname
    FROM YOUR_TABLE yt
GROUP BY yt.uid
3 голосов
/ 19 февраля 2012

Вам просто нужно присоединить таблицу к себе примерно так:

select first_name.value, last_name.value
from your_table first_name
join your_table last_name on first_name.uid = last_name.uid
where first_name.fid = 5
  and last_name.fid  = 6

Вы можете присоединить таблицу к себе или присоединиться к одной и той же таблице несколько раз, если для каждого экземпляра таблицы используется различный псевдоним.

2 голосов
/ 19 февраля 2012

Вы можете сделать само присоединение к uid следующим образом:

select 
  t1.value as 'First Name', 
  t2.value as 'Last Name' 
from 
  <table_name> t1 join 
  <table_name> t2 on t1.uid = t2.uid 
where 
  t1.fid = 5 and 
  t2.fid = 6;

Чтобы ускорить процесс, и, если его еще нет, рассмотрите возможность добавления индекса в fid следующим образом:

create index FID_IDX on <table_name> (fid);

это не позволит mysql использовать буфер соединения для разрешения запроса, и вместо этого он будет проходить через индекс.

Однако индекс немного замедлит вставки и обновления в этой таблице. Если производительность записи важнее чтения, не добавляйте ее.

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