用子查询保存查询结果的最佳方法是什么?

时间:2019-02-10 12:06:51

标签: mysql sql database view phpmyadmin

我想展示用户喜欢的所有成对相似产品,所以我想创建一个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 个答案:

答案 0 :(得分: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一起使用。