首頁 > 資料庫 > mysql教程 > 如何在連接表上使用 LIMIT 1 高效連接表?

如何在連接表上使用 LIMIT 1 高效連接表?

Linda Hamilton
發布: 2024-11-15 21:05:02
原創
669 人瀏覽過

How to Efficiently Join Tables with LIMIT 1 on a Joined Table?

在連接表上使用 LIMIT 1高效連接表

問題:

在僅檢索一個表的同時連接兩個表主表中每條記錄的連接表中的記錄,特別是在連線中存在多個記錄的上下文中

使用子查詢的解決方案:

這種方法有效地避免了從連接表中選擇多個列同時將結果限制為單一記錄時出現的錯誤。關鍵是利用子查詢來檢索所需記錄的主鍵。然後,使用子查詢來篩選主查詢中的聯結表。

SELECT
c.id,
c.title,
p.id AS product_id,
p.title AS product_title
FROM categories AS c
JOIN products AS p ON
p.id = (                                 --- the PRIMARY KEY
SELECT p1.id FROM products AS p1
WHERE c.id=p1.category_id
ORDER BY p1.id LIMIT 1
)
登入後複製

即使聯結表包含的記錄數量明顯多於主表,此查詢也表現出卓越的效能。

替代方法:

雖然子查詢方法通常是最佳的,但還有其他可用的方法。但是,重要的是要考慮它們潛在的性能影響。

  • 使用 GROUP BY 和陣列聚合(LIMIT 不適用):
SELECT
  id,
  category_title,
  (array_agg(product_title))[1]  
FROM
    (SELECT c.id, c.title AS category_title, p.id AS product_id, p.title AS product_title
    FROM categories AS c
    JOIN products AS p ON c.id = p.category_id
    ORDER BY c.id ASC) AS a 
GROUP BY id, category_title;
登入後複製
  • 使用 CRoIN (限制不適用):
SELECT
  c.id,
  c.title,
  p.id AS product_id,
  p.title AS product_title
FROM categories AS c
CROSS JOIN (SELECT product_id, title, ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY id) AS rn
            FROM products) AS p
WHERE rn = 1;
登入後複製

以上是如何在連接表上使用 LIMIT 1 高效連接表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板