我有三張桌子:
餐桌服
|id | productname | manufacturer | arrivaldate |
---- ------------- ----------------- --------------
| 1 | Shirt | MfrA | 5/30/20 |
| 2 | Tshirt | MfrB | 3/17/20 |
桌上玩具
|id | productname | manufacturer | arrivaldate |
---- ------------- ------------------ --------------
| 1 | Car | MfrC | 2/16/19 |
| 2 | Ball | MfrD | 8/25/20 |
表工具
|id | productname | manufacturer | arrivaldate |
---- ------------- ------------------ --------------
| 1 | Hammer | MfrE | 4/17/20 |
| 2 | Drill | MfrF | 9/12/21 |
我想展示每張表中包含的 5 個最新/最新產品,按到達日期 DESC 排序。它可以是新的資料庫視圖或表。
所需的輸出將是這樣的:
最新產品到貨
| productname | manufacturer | arrivaldate |
------------- ------------------ --------------
| Drill | MfrF | 9/12/21 |
| Ball | MfrD | 8/25/20 |
| Shirt | MfrA | 5/30/20 |
對此的 SQL 查詢是什么?
uj5u.com熱心網友回復:
如果display 5 latest/newest products, included from each table您的意思是組合結果集中的 5 個最新的,則使用 UNION 的視圖將完成這項作業:
create view testvw as select * from
(
(select productname,manufacturer,arrivaldate from Clothes)
UNION
(select productname,manufacturer,arrivaldate from Toys)
UNION
(select productname,manufacturer,arrivaldate from Tools)
) x
order by arrivaldate desc limit 5;
uj5u.com熱心網友回復:
實際上,另一個人有一個答案并將其洗掉,這也是我會提供的。唯一的區別是 SQL-Server 允許使用“TOP”關鍵字,而 MySQL 使用“LIMIT”。
通過單獨處理每個表,您可以按到達日期以 DESCENDING 順序排序,從而將最近的條目浮動到串列的頂部。然后,應用 LIMIT 5 會將結果限制為僅在排序結果之后回傳前 5 個。
通過對每個表源(衣服、玩具、工具)進行 UNION,概念是相同的。我只是添加了一個自由格式的描述,所以你知道它來自哪個表。
UNION 只要求每個表結果具有相同的列和列數。在這種情況下,它們都是相同且相同的名稱。
select * from
( select
'Clothes' as TableSource,
id,
productname,
manufacturer,
arrivaldate
from
Clothes
order by
arrivaldate desc
limit 5 ) QryClothes
UNION
select * from
( select
'Toys' as TableSource,
id,
productname,
manufacturer,
arrivaldate
from
Toys
order by
arrivaldate desc
limit 5 ) QryToys
UNION
select * from
( select
'Tools' as TableSource,
id,
productname,
manufacturer,
arrivaldate
from
Tools
order by
arrivaldate desc
limit 5 ) QryTools
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/462141.html
下一篇:對切??片的索引進行排序
