我想做的很简单,但是我缺少一些SQL知识,因此,我将不胜感激任何帮助。
我有表'dev'。
product1 | product2 | count
---------------------
我也有喜欢的桌子。
wishlist_id | user_id | product_id
-------------------------------
1 2 54
2 2 60
3 3 54
7 3 60
.. .. ..
99 99 99
我想找到2个产品一起被喜欢的次数,但是我不想创建视图,而是想将数据保存在dev表中。 如何更新行,使dev表变为:
dev
-----------------------
product1 product2 count
54 60 2
..
编辑
我不知道如何在这里实际使用更新语句。
我的查询是:
SELECT i1.product_id as product1, i2.product_id as product2,
COUNT(*) as num
FROM likes i1
INNER JOIN likes i2 ON i1.wishlist_id = i2.wishlist_id
AND i1.product_id < i2.product_id
GROUP BY product1, product2;
答案 0 :(得分:0)
假设您的dev表在一对product1和product2上具有唯一的键约束:
CREATE TABLE dev (
product1 INT NOT NULL,
product2 INT NOT NULL,
count INT NOT NULL DEFAULT 0,
PRIMARY KEY (product1, product2)
);
现在,您可以使用INSERT ... ON DUPLICATE KEY UPDATE添加或替换与产品对相对应的行。您已经有一个生成行的SELECT语句,现在需要在IODKU中使用它。
INSERT INTO dev (product1, product2, count)
SELECT i1.product_id as product1, i2.product_id as product2, COUNT(*) as num
FROM likes i1 INNER JOIN likes i2
ON i1.wishlist_id = i2.wishlist_id AND i1.product_id < i2.product_id
GROUP BY product1, product2
ON DUPLICATE KEY UPDATE count = VALUES(count);
在此处了解有关IODKU的更多信息:https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html