mysql - 使用子查询保存查询结果的最佳方法是什么?
问题描述
我想展示用户喜欢的所有相似产品对,所以我想创建一个视图来动态更新表格。
我收到无法使用子查询创建视图的消息。我也想过创建一个临时表,但它没有效果。
当存在 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
解决方案
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
.
推荐阅读
- django - 具有多对多关系的 ModelForm:如果需要,如何自动创建新条目?
- string - golang 中的字符串转换和 Unicode
- php - Json 文件到 php 中的 HTML 表
- visual-studio-2013 - 使用早期版本的 MSBUILD
- ios - 使用未解析的标识符“NSSearchPathForDirectoriesInDomain”
- google-cloud-platform - App Engine 还是 Kubernetes Engine 更适合大型、持续的工作负载?
- javascript - 在 Edge 中的 Bootstrap 4 轮播中搭便车
- python - Python3 TCP 服务器看不到来自外部设备的传入消息
- r - 为什么这些功能不同?
- java - 使用 ShapeRenderer 在 libGDX 中缩放渲染形状