我有这3张桌子。给定Group Name
,我想从Product Table
查找该组的所有产品,然后从Version table
产品组表
id group_name
---------------------------
1 Nice
2 Very Nice
产品表
prod_id name group_id
---------------------------
1 something 2
2 psp3 1
3. other one 2
版本表
id prod_id version
---------------------------
1 2 1.0
2 2 1.1
3 3 2.3
4 1 0.1
5. 1 0.2
例如给定组名Very Nice
,我期望的输出是
Group_name prod_name version
---------------------------------
Very Nice something 0.2
Very Nice other one 2.3
我正在尝试对所有3个表进行Join,然后在上进行区分,然后按desc排序并选择第一个。但是我最终只得到1而不是上面的结果。想知道sql查询是什么样子?如果有问题,我正在使用PostgreSQL,Scala / Slick。
使用DISTINCT ON
:
SELECT DISTINCT ON (pg.id, p.prod_id)
pg.group_name, p.name AS prod_name, v.version
FROM product_group pg
LEFT JOIN product p ON pg.id = p.group_id
LEFT JOIN version v ON v.prod_id = p.prod_id
ORDER BY pg.id, p.prod_id, v.version DESC;