Как я могу взять результаты двух строк базы данных и объединить их в одну строку? - PullRequest
1 голос
/ 13 сентября 2009

У меня есть запрос MySQL DB, который я хотел бы взять и сжать в одну строку. В настоящее время выходные данные состоят из двух строк и будут только двумя строками. Причина, по которой я получаю две строки, заключается в том, что с моим результатом всегда будет основной и дополнительный телефонные номера.

Поскольку все данные одинаковы для обеих строк, за исключением типа телефона (ptype) и второго номера телефона, я хотел бы просто взять эти два столбца и добавить их в первую строку. *

Я знаю, что это можно сделать, но я не могу вспомнить, как это сделать.

Вот код, который я использую:

SELECT
c.name,
c.address1,
p.ptype,
p.phone
FROM
customer AS c
Inner Join customeremp AS e ON c.customer_id = e.customer_id
Inner Join customerphone AS p ON e.customer_seq = p.customer_seq
WHERE
c.customer_id =  '1'

Ответы [ 3 ]

2 голосов
/ 13 сентября 2009

Вам нужно создать 2 объединения на столе в телефоне

 SELECTc.name,
 c.address1,
 p.ptype,
 p.phone,
 p2.ptype,
 p2.phone,
 FROMcustomer AS cInner 
 Join customeremp AS e ON   c.customer_id = e.customer_idInner 
 Join customerphone AS p ON e.customer_seq = p.customer_seq and p.pType = 1 (or whatever private means)
 Join customerphone AS p2 ON e.customer_seq = p2.customer_seq and p2.pType = 2 (or whatever the other type is)
 WHEREc.customer_id =  '1'

Редактировать: этот запрос вернет только клиента, у которого установлены оба типа телефона. Если они являются необязательными, вам следует рассмотреть возможность изменения соединения на внешнее соединение

1 голос
/ 13 сентября 2009
select c.name,c.address1,primary.phone,secondary.phone
  from customer c
  join customeremp e
    on c.customer_id = e.customer_id
  join customerphone primary
    on primary.ptype = 'primary'
   and e.customer_seq = primary.customer_seq
  join customerphone secondary
    on secondary.ptype = 'secondary'
   and e.customer_seq = secondary.customer_seq
 where c.customer_id =  '1'
0 голосов
/ 13 сентября 2009

Попробуйте это:

SELECT
   c.name,
   c.address1,
   IF(p.ptype = 'primary', p.phone, null)),
   IF(p.ptype = 'secondary', p.phone, null))
FROM customer JOIN (blah blah)
WHERE customer_id = 1
GROUP BY c.name, c.address1

Если это не работает, вам может понадобиться добавить статистическую функцию в последние два поля, например: MAX(IF(p.ptype ...

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