首页 > 解决方案 > 使用子查询保存查询结果的最佳方法是什么?

问题描述

我想展示用户喜欢的所有相似产品对,所以我想创建一个视图来动态更新表格。

我收到无法使用子查询创建视图的消息。我也想过创建一个临时表,但它没有效果。

当存在 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

标签: mysqlsqldatabaseviewphpmyadmin

解决方案


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.


推荐阅读