例如,我有两个表,供应商和vendorCategory。然后我想得到6个不同类别的随机供应商。如何将其转换为postgresql?或者更适合于java的QueryDSL。
例如我有供应商: v1,v2,v3,等等.然后我有分类: c1,c2,c3等等.在我们的示例中,假设vx有一个类别cx。所以v1有分类c1,v2有c2等等.
查询的结果应该返回v1、v2、v3、v4、v5、v6。或者任何随机的顺序。它不应返回同一类别的供应商。例如,假设我们有v1a,它有一个类别c1。因此,v1和v1a不应该一起返回。
发布于 2017-10-13 02:10:29
多亏了上面的两个答案,我才能想出:
select * from
(
SELECT DISTINCT ON(vc.id) v.vendor_name, vc.description, vc.id
FROM cat_vendor_category AS vc
INNER JOIN cat_vendor AS v ON v.vendor_category_id = vc.id
ORDER BY vc.id, random()
) Q
order by random()
LIMIT 6;这将生成具有唯一类别的供应商的随机列表。
现在真正的问题是如何将其转换为QueryDSL或至少jpql。
发布于 2017-10-12 14:32:37
就像这样。名称取决于您的特定配置:
SELECT DISTINCT ON(vc.id), v.vendorName, vc.categoryName
FROM vendorCategory AS vc
INNER JOIN vendors AS v ON v.categoryId = vc.id
ORDER BY random()
LIMIT 6;所以,不同的类别,随机行,只有六行
如果你想得到一个正确的答案,请提供样本表格。我只是告诉你们我是如何看待这个问题的,而不是完全的解决办法。(因为没有真正的数据)
发布于 2017-10-12 15:05:06
您可以像这样使用DISTINCT ON () (PostgreSQL专用):
SELECT DISTINCT ON (vc.categoryName) v.vendorName, vc.categoryName
FROM vendorCategory vc
INNER JOIN vendors v ON v.categoryId = vc.id
LIMIT 6 https://stackoverflow.com/questions/46711979
复制相似问题