簡體   English   中英

同一表上的多個內部聯接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM