簡體   English   中英

存儲子查詢的結果以用於多個聯接

[英]Store the results of a sub-query for use in multiple joins

我有以下MySQL查詢,它產生我想要的結果:

SELECT
  `l`.`status`,
  `l`.`acquired_by`, `a`.`name` AS 'acquired_by_name',
  `l`.`researcher`,  `r`.`name` AS 'researcher_name',
  `l`.`surveyor`,    `s`.`name` AS 'surveyor_name'
FROM `leads` `l`
LEFT JOIN (
  SELECT '0' AS 'id', 'Unassigned' AS 'name'
  UNION ALL
  SELECT `id`, `name`
  FROM `web_users`
) `r` ON `r`.`id` = `l`.`researcher`
LEFT JOIN (
  SELECT '0' AS 'id', 'Unassigned' AS 'name'
  UNION ALL
  SELECT `id`, `name`
  FROM `web_users`
) `s` ON `s`.`id` = `l`.`surveyor`
LEFT JOIN (
  SELECT '0' AS 'id', 'Unassigned' AS 'name'
  UNION ALL
  SELECT `id`, `name`
  FROM `web_users`
) `a` ON `a`.`id` = `l`.`acquired_by`
WHERE `l`.`id` = 566

但正如您所看到的,它在其中具有相同的子查詢三次。 有沒有辦法執行此查詢一次並存儲結果,所以我可以使用緩存的結果LEFT JOIN而不是執行相同的查詢三次?

我已經嘗試將其存儲在變量中:

SET @usercache = (
  SELECT '0' AS 'id', 'Unassigned' AS 'name'
  UNION ALL
  SELECT `id`, `name`
  FROM `web_users`
)

......但這給了我一個錯誤:

1241 - 操作數應包含1列

...而一些谷歌搜索這個錯誤讓我沒有更聰明。

有誰知道如何使這個查詢更有效? 或者我只是擔心無關緊要的事情?

如果它有任何區別,我正在使用PHP / MySQLi。

你真的需要子查詢嗎? 這個怎么樣:

SELECT
  `l`.`status`,
  `l`.`acquired_by`, COALESCE(`a`.`name`, 'Unassigned') AS 'acquired_by_name',
  `l`.`researcher`,  COALESCE(`r`.`name`, 'Unassigned') AS 'researcher_name',
  `l`.`surveyor`,    COALESCE(`s`.`name`, 'Unassigned') AS 'surveyor_name'
FROM `leads` `l`
LEFT JOIN `web_users` `r` ON `r`.`id` = `l`.`researcher`
LEFT JOIN `web_users` `s` ON `s`.`id` = `l`.`surveyor`
LEFT JOIN `web_users` `a` ON `a`.`id` = `l`.`acquired_by`
WHERE `l`.`id` = 566

你不能運行一次 - 你實際上使用它三次得到三個不同的結果......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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