3.
klesh, годится
я пока сделал 2 способами
но вот второй без подзапросов не возвращает ничего если нет фамилии или телефона
SELECT c.id, ci.value FirstName, c.name, ci2.value phone
FROM customer c
LEFT JOIN (SELECT * FROM customerinfo Where field='FirstName') ci ON ci.id = c.id
LEFT JOIN (SELECT * FROM customerinfo Where field='phone') ci2 ON ci2.id = c.id
// Вариант 2 без подзапросов
SELECT c.id, ci.value FirstName, c.name, ci2.value phone
FROM customer c
LEFT JOIN customerinfo ci ON ci.id = c.id
LEFT JOIN customerinfo ci2 ON ci2.id = c.id
WHERE ci.field = 'FirstName'
AND ci2.field = 'phone'