[英]Multiple Inner Joins on Same Table
我正在嘗試在同一張表上進行多個連接,並且在添加了這么多 MYSQL 后失去連接。 我知道我在這段代碼上做的太多並阻塞了數據庫。 這是我正在使用的代碼。 我如何簡化它並使其更有效?
SELECT
y.`value` AS `Year`,
m.`value` AS `Make`,
mo.`value` AS `Model`,
t.`value` AS `Title`,
se.`value` AS `Seller Email`,
v.`value` AS `VIN`,
p.`value` AS `Posted`,
e.`value` AS `Expired`,
d.`value` AS `Expire Date`
FROM
(SELECT `record`, `value` FROM thrn1_facileforms_subrecords WHERE `name`='vehicleYear') AS y
INNER JOIN
(SELECT `record`, `value` FROM thrn1_facileforms_subrecords WHERE `name`='sellerEmail') AS se
USING (`record`)
INNER JOIN
(SELECT `record`, `value` FROM thrn1_facileforms_subrecords WHERE `name`='vehicleVin') AS v
USING (`record`)
INNER JOIN
(SELECT `record`, `value` FROM thrn1_facileforms_subrecords WHERE `name`='yearMakeModel') AS t
USING (`record`)
INNER JOIN
(SELECT `record`, `value` FROM thrn1_facileforms_subrecords WHERE `name`='vehicleadExpired') AS e
USING (`record`)
INNER JOIN
(SELECT `record`, `value` FROM thrn1_facileforms_subrecords WHERE `name`='vehicleModel') AS mo
USING (`record`)
INNER JOIN
(SELECT `record`, `value` FROM thrn1_facileforms_subrecords WHERE `name`='vehicleMake') AS m
USING (`record`)
INNER JOIN
(SELECT `record`, `value` FROM thrn1_facileforms_subrecords WHERE `name`='expireDate') AS d
USING (`record`)
INNER JOIN
(SELECT `record`, `value` FROM thrn1_facileforms_subrecords WHERE `name`='datePosted') AS p
USING (`record`)```
連接丟失很可能是因為客戶端在等待結果太久后關閉連接(客戶端超時)。 你可以增加這個值,最終會得到答案。
這里真正的問題是“實體值屬性”反模式的使用。 您正在使用不同的行來存儲不同類型的數據,因此必須運行此巨型連接才能獲得所需的內容。 相反,您應該嘗試將給定記錄的所有數據放在一行中,並根據需要包含盡可能多的列。
我考慮 EVA 模式的唯一原因是應用程序允許用戶定義“自定義字段”。 是的,太多這樣的字段會產生極其低效的查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.