2016-04-15 95 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