[英]SQL multiple left join as new columns performance
我有 3 张桌子:
帐户
ID | 姓名 |
---|---|
1 | 谷歌 |
2 | 苹果 |
自定义字段
ID | 姓名 |
---|---|
1 | 电话 |
2 |
custom_field_submission
ID | custom_field_id | entity_id | 价值 |
---|---|---|---|
1 | 1 | 1 | 555-444-333 |
2 | 1 | 2 | 111-111-111 |
3 | 2 | 1 | google@goog.com |
4 | 2 | 2 | 苹果@apple.com |
查询后的预期结果
ID | 姓名 | 电话 | |
---|---|---|---|
1 | 谷歌 | 555-444-333 | google@goog.com |
2 | 苹果 | 111-111-111 | 苹果@apple.com |
我有一个这样的查询:
SELECT
a.id,
a.name,
phone.value as phone,
email.value as email
FROM account a
LEFT JOIN (
SELECT DISTINCT custom_field_submission.value, custom_field_submission.entity_id
FROM custom_field_submission
WHERE custom_field_submission.custom_field_id = 1) AS phone
ON phone.entity_id = a.id
LEFT JOIN (
SELECT DISTINCT custom_field_submission.value, custom_field_submission.entity_id
FROM custom_field_submission
WHERE custom_field_submission.custom_field_id = 2) AS email
ON email.entity_id = a.id
实际上,我为 10 000 个帐户提供了 20 个自定义字段。 我在哪里运行查询非常慢(3-4秒)
你有一个想法来管理优化这个吗?
谢谢。
您需要的是 pivot 查询:
SELECT
a.id,
a.name,
MAX(CASE WHEN cf.name = 'Phone' THEN cfs.value END) AS Phone,
MAX(CASE WHEN cf.name = 'Email' THEN cfs.value END) AS Email
FROM account a
LEFT JOIN custom_field_submission cfs
ON cfs.entity_id = a.id
LEFT JOIN custom_field cf
ON cf.id = cfs.custom_field_id
GROUP BY
a.id,
a.name;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.