2016-04-15 100 views
1

好吧,所以我不知道如何告诉MySQL在两个不同的表中如果他们共享相同的ID,然后将其存储到另一个表中,可以将两个值的差值取出。我试图用这个片段是应该保持的任何值使用相同的ID,但我想我没有错:比较2个MySQL表格,并获得差异

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

表A:

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

tableB的:

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

(tableA-tableB)newTable:

itemid | price 
    0  | -30 
    2  |  10 

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

回答

0

您的查询几乎在那里。你只需要添加一个表达式到SELECT列表。该表达式将计算您想要作为列返回的值。

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的价格列的值。并将结果作为结果集中的列返回。向列“AS price_diff”添加别名将为结果集中的列提供指定的名称。

您可以从SELECT列表中删除表达式。额外的列被添加作为一种方式来看看发生了什么。获取你想要返回的两列。

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

如果采取这一结果集,并将其存储为另一个表(我不认为你真的想这样做),但有可能做到这一点。

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 ... 
+0

第一个例子,你说这样它会返回一个列。你知道它到底在哪里吗?我知道你说过它返回结果集..但我不确定它是否被添加到tableA或tableB。 –

+0

SELECT语句的成功执行准备一个结果集并将其返回给客户端。如果您正在运行msyql命令行客户端,则结果集中的行将显示在终端窗口中。查询的结果集看起来像一个包含行的定义列(包含名称和数据类型)。 (SELECT语句可以指定一个ORDER BY子句,以便与表格不同,这些行以特定顺序返回)。结果集仅在语句持续时间内保留。 SELECT语句不会删除或替换表中存储的任何值。 – spencer7593

+0

在CREATE TABLE示例中,演示了如何将SELECT查询(结果集)返回的行转换为表。 (它与运行CREATE TABLE和INSERT ... SELECT语句的效果相同。)它是存储结果集的CREATE TABLE AS或INSERT。 SELECT只是提供行。 – spencer7593

0

不幸的是我不能添加评论,所以如果我假设你的itemId是唯一的。 试试这个查询sql;)

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