比较 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 ...
好吧,所以我不知道如何告诉 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 ...