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