У меня есть таблица свойств для одного человека, один и тот же человек может иметь до 18 различных свойств. Таблица выглядит так:
Personid, Propertytype, Propertyvalue, Propertyname
Я хочу выполнить SQL-запрос с FULL JOIN, чтобы получить все свойства одного человека в одну строку в наборе результатов.
Я сделал такой запрос, но думаю, что он не оптимален, если вы думаете о времени отклика / производительности.
В базе данных у меня более 12 миллионов человек, поэтому много датаров.
Мой SQL-запрос:
SELECT DISTINCT (Information.PersonID),
f.PersonName,
f1.Property AS 'P1',
f1.PropertyValue AS 'P1Value',
f1.PropertyName AS 'P1Name',
f2.Property AS 'P2',
f2.PropertyValue AS 'P2Value',
f2.PropertyName AS 'P2Name',
......
FROM Person f
FULL JOIN (
SELECT
PersonName,
Property,
PropertyValue,
PropertyName
FROM Person WHERE Property='P1'
GROUP BY PersonName, Property, PropertyValue, PropertyName
) f1 ON f.PersonName=f1.PersonName
FULL JOIN (
SELECT PersonName,
Property,
PropertyValue,
PropertyName
FROM Person WHERE Property='P2'
GROUP BY PersonName, Property, PropertyValue, PropertyName
) f2 ON f.PersonName=f2.PersonName
....
INNER JOIN Information ON f.PersonName = Information.Name
Какой-нибудь совет, как сделать этот запрос более эффективным?