我有兩個表:product 和 productVariation:產品變體表包含同一產品的多個條目,但具有不同的屬性。
示例:產品:id 名稱 1 頂部 2 底部
| ID | 名稱 |
|---|---|
| 1 | 最佳 |
| 2 | 底部 |
產品變化表:
| ID | 產品編號 | 顏色標識 | 大小id |
|---|---|---|---|
| 1 | 1 | 4 | 7 |
| 2 | 1 | 5 | 7 |
| 3 | 1 | 8 | 7 |
| 4 | 1 | 7 | 10 |
所以對于上面的表格,當我查詢要顯示的產品串列的資料時,假設用戶想要 size_id 7 的資料,那么我們有 3 種可能性(3 種不同的顏色)但是在產品串列頁面上,我只想顯示此產品的一個條目。我的問題是我怎樣才能根據產品變體表中的 product_id 獲得一個條目。我已經寫了一個基于顏色和大小過濾資料的查詢,但我得到了同一產品的多個條目,我只想要這些行中的一個。
謝謝!:)
uj5u.com熱心網友回復:
我猜row_number在這里可能有用。
如果您的 MySql 或 MariaDB 版本支持它。
SELECT product_id, product_name, color_id, size_id
FROM
(
SELECT
pvar.product_id
, product.name AS product_name
, pvar.color_id
, pvar.size_id
, row_number() over (partition by pvar.product_id order by pvar.id DESC) AS rn
FROM product AS product
JOIN productVariation AS pvar
ON pvar.product_id = product.id
WHERE pvar.product_id IN (1)
AND pvar.size_id = 7
) q
WHERE rn = 1
或者也許只是LIMIT結果集。
SELECT
pvar.product_id
, product.name AS product_name
, pvar.color_id
, pvar.size_id
FROM product AS product
JOIN productVariation AS pvar
ON pvar.product_id = product.id
WHERE pvar.product_id IN (1)
AND pvar.size_id = 7
ORDER BY pvar.product_id, pvar.id DESC
LIMIT 1
uj5u.com熱心網友回復:
您可以聚合多種顏色并按大小分組,以最小值或最大值作為選擇。在橫向連接中這樣做看起來像
select *
from products p
left join lateral(
select size_id, max(color_id) color_id
from productvariations v
where v.product_id = p.id
group by size_id
)pv on true
where pv.size_id = 7;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/391754.html
上一篇:按多值SQL過濾資料
