Объединение одного запроса с несколькими строками из одной таблицы - PullRequest
1 голос
/ 02 декабря 2010

Хорошо, у меня есть две таблицы в MySQL.В одной таблице хранится информация о клиентах, в другой - номера телефонов.Мне нужно объединить эти таблицы в одном запросе, чтобы выбрать до двух телефонных номеров из таблицы телефонов, а также информацию о клиентах.прямо сейчас мой запрос:

SELECT customers.name, phones.phone, phones2.phone 
FROM customers 
LEFT JOIN phones ON phones.customerid=customers.id 
LEFT JOIN phones AS phones2 ON phones2.customerid=customers.id 
GROUP BY customers.id;

Однако, это возвращает один и тот же номер телефона для телефона 1 и телефона 2. По сути, мне нужно сместить phone2 на 1, но я не знаю, как это сделать.сделать это синтаксически.

Телефоны находятся в отдельной таблице, потому что это отношение один ко многим.

Мне нужно, чтобы это было в одном запросе, потому что я экспортирую это непосредственно в CSV.

Помощь очень ценится.Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 02 декабря 2010

Вы просто хотите произвольный 0,1 или 2 телефонных номера на клиента тогда? Если так Max и Min ОК? Это спасет вас от присоединения.

SELECT customers.name, 
       MAX(phones.phone) AS phone, 
       CASE WHEN MAX(phones.phone) = MIN(phones.phone) THEN NULL ELSE MIN(phones.phone) END AS phone2
FROM customers 
LEFT JOIN phones ON phones.customerid=customers.id 
GROUP BY customers.id;
1 голос
/ 02 декабря 2010

Что вы хотите сделать, это удалить случаи, когда цифры одинаковы.

SELECT customers.name, phones.phone, phones2.phone 
FROM customers 
LEFT JOIN phones ON phones.customerid=customers.id 
LEFT JOIN phones AS phones2 ON phones2.customerid=customers.id 
WHERE phones2.phone != phones.phone
GROUP BY customers.id
1 голос
/ 02 декабря 2010

Чтобы избежать получения одного и того же номера телефона дважды, вы можете изменить это:

LEFT JOIN phones AS phones2 ON phones2.customerid=customers.id 

На это:

LEFT JOIN phones AS phones2 ON phones2.customerid=customers.id
AND phones2.phone <> phones.phone
...