2017-01-30 131 views
0

IM具有2代表与波纹管的数据(不匹配数据可以是amount1或AMOUNT2)在MySQL比较2列

date  ID amount1 amount2 
11-2-16  2  2   0 
11-2-16  1  5   11 
11-2-16  3  0   9 
12-2-16  2  4   0 
12-2-16  1  4   0 

表2

Bdate  BID Bamount1 Bamount2 
11-2-16  1  5   11 
11-2-16  2  1   0 
11-2-16  3  0   6 
12-2-16  1  4   0 
12-2-16  2  1   0 

我需要的是,以显示数据这是不是在这两个表匹配像下面

Date  id  Amoun1 Bamount1  Amount2  Bamount 
11-2-16  2  2  1   
11-2-16  3         9   6 
12-2-16  2  4  1       

感谢您的帮助

+0

请详细说明 “这是不匹配”。目前尚不清楚你的意思 – apomene

+0

不符合数据可以在金额1或金额2 –

回答

1

创建表/插入数据

CREATE TABLE Table1 
    (`date` VARCHAR(7), `ID` INT, `amount1` INT, `amount2` INT) 
; 

INSERT INTO Table1 
    (`date`, `ID`, `amount1`, `amount2`) 
VALUES 
    ('11-2-16', 2, 2, 0), 
    ('11-2-16', 1, 5, 11), 
    ('11-2-16', 3, 0, 9), 
    ('12-2-16', 2, 4, 0), 
    ('12-2-16', 1, 4, 0) 
; 


CREATE TABLE Table2 
    (`Bdate` VARCHAR(7), `BID` INT, `Bamount1` INT, `Bamount2` INT) 
; 

INSERT INTO Table2 
    (`Bdate`, `BID`, `Bamount1`, `Bamount2`) 
VALUES 
    ('11-2-16', 1, 5, 11), 
    ('11-2-16', 2, 1, 0), 
    ('11-2-16', 3, 0, 6), 
    ('12-2-16', 1, 4, 0), 
    ('12-2-16', 2, 1, 0) 
; 

查询

加入日期和id并使用哪里来过滤出字段不匹配的地方。

SELECT 
    Table1.date AS "Date" 
, Table1.id 
, (CASE WHEN Table1.Amount1 > 0 THEN Table1.Amount1 ELSE NULL END) AS "Amount1" 
, (CASE WHEN Table2.Bamount1 > 0 THEN Table2.Bamount1 ELSE NULL END) AS "Bamount1" 
, (CASE WHEN Table1.amount2 > 0 THEN Table1.amount2 ELSE NULL END) AS "amount2" 
, (CASE WHEN Table2.Bamount2 > 0 THEN Table2.Bamount2 ELSE NULL END) AS "Bamount2" 
FROM 
Table1 
INNER JOIN 
Table2 
ON 
    Table1.date = Table2.Bdate 
AND 
    Table1.id = Table2.Bid 
WHERE 
    Table1.amount1 != Table2.Bamount1 
    OR 
    Table1.amount2 != Table2.Bamount2 

结果

Date   id Amount1 Bamount1 amount2 Bamount2 
------- ------ ------- -------- ------- ---------- 
11-2-16  2  2   1 (NULL)  (NULL) 
11-2-16  3 (NULL) (NULL)  9   6 
12-2-16  2  4   1 (NULL)  (NULL) 
+0

谢谢你,这是工作很好。 –

0

你是否想要两行不匹配的行或者哪一行不行。如果它的第二个,利用这一点,如果第一,改变或到与

select * from table1 as t1 join table2 as t2 on t1.ID = t2.BID where t1.amount1 != t2.Bamount1 or t2.amount2 != t2.Bamount2