比较 2 MySQL 表并找出差异

Comparing 2 MySQL tables and grabbing the difference

好吧,所以我不知道如何告诉 MySQL 在 2 个不同的 table 中取 2 个值的差异,如果它们共享相同的 ID,然后将其存储到另一个 table。我尝试使用这个应该保留具有相同 ID 的任何值的代码段,但我想我做错了:

SELECT tableA.itemid FROM tableA INNER JOIN tableB ON tableA.itemid=tableB.itemid WHERE tableA.price <> tableB.price;

table一个:

 itemid   |   price
   0      |     10
   1      |     40
   2      |     30

tableB:

 itemid   |   price
   0      |     40
   2      |     20
   3      |     90

(tableA-tableB) 新表:

 itemid   |   price
   0      |    -30
   2      |     10

如果有人能帮助我指出正确的方向,那就太好了。我对 MySQL 还是比较陌生,所以如果我还能获得一些指向处理类似问题的教程的链接,那也很好。

很遗憾,我无法添加评论,所以如果我假设您的 itemId 是唯一的。 试试这个查询 sql;)

SELECT a.itemid, a.price - b.price AS price
FROM tableA a, tableB b
WHERE a.itemid = b.itemid

您的查询快完成了。您只需要在 SELECT 列表中添加一个表达式。该表达式将计算您想要 return 作为列的值。

 SELECT a.itemid
      , a.price
      , b.price
      , a.price - b.price AS price_diff
   FROM tableA a 
   JOIN tableB b 
     ON b.itemid = a.itemid
  WHERE b.price <> a.price; 

在本例中,这是一个相当简单的表达式:

 a.price - b.price

这样,MySQL 将从 tableA 中的价格列值中减去 tableB 中价格列的值。并且 return 结果作为结果集中的一列。向列添加别名 "AS price_diff" 将为结果集中的列指定名称。

您可以从 SELECT 列表中删除表达式。添加额外的列是为了查看发生了什么。只获取您想要 returned 的两列。

 SELECT a.itemid
      , a.price - b.price AS diff
   FROM ... 

如果您将该结果集存储为另一个 table(我不认为您真的想这样做)但可以这样做。

CREATE TABLE new_foo
AS
SELECT a.itemid
     , a.price - b.price AS diff
  FROM ... 

理想情况下,我们会对其进行修改以标识主键和列的数据类型等。

CREATE TABLE new_foo
( itemid      BIGINT NOT NULL PRIMARY KEY
, price_diff  DECIMAL(20,2)   COMMENT 'difference in price'
) ENGINE=InnoDB 
AS
SELECT a.itemid          AS itemid
     , a.price - b.price AS price_diff
  FROM ...