从另一个表的数据更新表的所有列?

时间:2019-02-20 17:34:41

标签: mysql sql database

我想做的很简单,但是我缺少一些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;

1 个答案:

答案 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