使用子查询保存查询结果的最佳方法是啥?
Posted
技术标签:
【中文标题】使用子查询保存查询结果的最佳方法是啥?【英文标题】:What is the best way to save query results with a subquery?使用子查询保存查询结果的最佳方法是什么? 【发布时间】:2019-02-10 12:06:51 【问题描述】:我想显示用户一起喜欢的所有相似产品对,所以我想创建一个 VIEW 来动态更新表格。
我收到无法使用子查询创建视图的消息。 我也想过创建一个临时表,但它没有效果。
当存在 VIEW 限制时,如何将查询结果保存在表中?
这是我的查询:
SELECT DISTINCT c.item1
, c.item2
, count(*) as times_liked_together
FROM
( SELECT a.product_id as item1
, b.product_id as item2
FROM items a
join items b
ON a.wishlist_id = b.wishlist_id
AND a.product_id != b.product_id
) c
GROUP
BY c.item1
, c.item2
【问题讨论】:
【参考方案1】:mysql 对视图有这个限制。在您的情况下,您不需要子查询:
SELECT i1.product_id as item1, i2.product_id as liked_with,
COUNT(*) as num_liked_together
FROM items i1 INNER JOIN
items i2
ON i1.wishlist_id = i2.wishlist_id AND
i1.product_id < i2.product_id
GROUP BY item1, item2;
请注意,我将 <>
更改为 <
。我看不出结果集中同时包含 (a, b) 和 (b, a) 的理由。如果这样做,请将<
改回<>
。
另外,SELECT DISTINCT
几乎从不与GROUP BY
一起使用。
【讨论】:
非常感谢。:) 我为此苦苦挣扎了很长时间。以上是关于使用子查询保存查询结果的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 JPA Criteria API 的子查询中使用 ORDER BY 的替代方法是啥?