使用JOIN,是這樣的:
SELECT page.*, view.*
FROM page
LEFT OUTER JOIN view
ON view.page_id = page.id
通過使用LEFT OUTER JOIN
,沒有意見的頁面仍然會被退回,但view
列將NULL
。
這將在一次查詢中爲您提供所有需要的結果。數據庫引擎執行關聯表的工作通常比自己做的更好。然後你只需要一次訪問數據庫引擎,它就可以比你的代碼更快地執行關聯。
得到計數,你可以做一個連接,與分組基於的(這可能是一個醜陋的查詢,這取決於你的數據庫引擎)或使用子查詢的查詢:
SELECT
page.*,
(
SELECT COUNT(view.id)
FROM view
WHERE view.page_id = page.id
) AS view_count
FROM page
組,由變種會是這個樣子:
SELECT page.*, COUNT(view.id)
FROM page
LEFT OUTER JOIN view
ON view.page_id = page.id
GROUP BY page.id
根據您的數據庫引擎和模式,你可能會超過page.id
有組。
一個不錯的查詢規劃器會將子查詢示例轉換爲連接,因此兩個查詢的性能應該類似(如果不相同)。儘管如此,您應該使用EXPLAIN
來確定一個變體是否比其他變體更優化。
請發表您的代碼,這樣我們就可以明白爲什麼這個錯誤可能存在的 – canadiancreed