[英]Limit total number of results across tables
我想獲取最近發生的 100 個事件。 事件分散在多個表中。 這是一個例子:
SELECT * FROM log_items_purchased ORDER BY timestamp DESC LIMIT 100
UNION
SELECT * FROM log_items_fulfilled ORDER BY timestamp DESC LIMIT 100
UNION
SELECT * FROM log_items_shipped ORDER BY timestamp DESC LIMIT 100
這將返回最多 300 條記錄。 然后,我將獲取結果集,按時間戳排序,並獲取前 100 條記錄。 如何在單個 SQL 查詢中執行此操作,其中 SQL 將僅返回結果集中的 100 條記錄。
我意識到可以通過從每個查詢中刪除 LIMIT 100 來執行此操作,然后進行添加 LIMIT 100 的外部查詢,但是這些表確實很大,而且效率很低。
將其放在子查詢中,然后在主查詢中使用LIMIT 100
。
SELECT *
FROM (
SELECT * FROM log_items_purchased ORDER BY timestamp DESC LIMIT 100
UNION
SELECT * FROM log_items_fulfilled ORDER BY timestamp DESC LIMIT 100
UNION
SELECT * FROM log_items_shipped ORDER BY timestamp DESC LIMIT 100
) AS x
ORDER BY timestamp DESC
LIMIT 100
如果您想在 SQL 中執行此操作,請使用子查詢:
SELECT e.*
FROM ((SELECT * FROM log_items_purchased ORDER BY timestamp DESC LIMIT 100
) UNION ALL
(SELECT * FROM log_items_fulfilled ORDER BY timestamp DESC LIMIT 100
) UNION ALL
(SELECT * FROM log_items_shipped ORDER BY timestamp DESC LIMIT 100
)
) e
ORDER BY timestamp DESC
LIMIT 100;
注意:不要使用UNION
。 刪除重復項會產生開銷。
我認為這會奏效
(SELECT * FROM log_items_purchased ORDER BY timestamp DESC LIMIT 100)
UNION
(SELECT * FROM log_items_fulfilled ORDER BY timestamp DESC LIMIT 100)
UNION
(SELECT * FROM log_items_shipped ORDER BY timestamp DESC LIMIT 100)
ORDER BY timestamp DESC LIMIT 100
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.