使用子查询保存查询结果的最佳方法是啥?

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;

请注意,我将 &lt;&gt; 更改为 &lt;。我看不出结果集中同时包含 (a, b) 和 (b, a) 的理由。如果这样做,请将&lt; 改回&lt;&gt;

另外,SELECT DISTINCT 几乎从不与GROUP BY 一起使用。

【讨论】:

非常感谢。:) 我为此苦苦挣扎了很长时间。

以上是关于使用子查询保存查询结果的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

联合查询、表连接查询、子查询三种查询的特点和注意事项各是啥

使用以下查询获得结果的最佳方法是啥

Cassandra,运行子查询的有效方法是啥

在 JPA Criteria API 的子查询中使用 ORDER BY 的替代方法是啥?

在 SQL Server(查询分析器)中的查询结果中识别隐藏字符的最佳方法是啥?

DB2 子查询最佳实践