2013-02-24 49 views
1

之间的差异记录这是较早question这里的延伸的Mysql只返回有两个表

我有两个表,昨天和今天,并在每个表中有两列

StockNumber, StockLevel 

如何我找出

  1. 只有在他们StockLevel的
  2. 返回自动对焦差异StockNumbers染StockNumber & StockLevel值

例如:

各国表:

StockNumber, StockLevel 
ABC, 10 
CBA,5 
123,5 

昨天表:

StockNumber, StockLevel 
ABC, 9 
CBA,5 
123,10 

返回以下无线

StockNumber, StockLevel 
ABC, 10 
123, 5 

现在注意StockNumber“ABC”正在返回今天的值10,StockNumber“123”也正在返回今天的值5和StockNumber“CBA”没有变化并且没有被返回。

非常感谢,

马特

回答

3

这将做它的股票,这两天都存在;

SELECT t.StockNumber, t.StockLevel 
FROM today t 
JOIN yesterday y 
    ON t.StockNumber=y.StockNumber 
AND t.StockLevel <> y.StockLevel 

如果您(如您之前的问题)也希望今天包括新股票;

SELECT t.StockNumber, t.StockLevel 
FROM today t 
LEFT JOIN yesterday y 
    ON t.StockNumber = y.StockNumber 
WHERE y.StockNumber IS NULL 
    OR t.StockLevel <> y.StockLevel 

An SQLfiddle to test both with

+0

后来的查询做了伎俩,谢谢 – 2013-02-24 16:42:37

0

可以联接StockNumber表和选择这些行WHERE NOT A.StockLevel = B.StockLevel

0

这有点棘手,因为你可能在两个表中有不同的项目。我建议一个工会所有和团体由这个:

select stockNumer, 
     max(case when which = 'yesterday' then stocklevel end) as yesterdaylevel, 
     max(case when which = 'today' then stocklevel end) as todaylevel 
from ((select StockNumber, StockLevel, 'yesterday' as which 
     from yesterday 
    ) union all 
     (select StockNumber, StockLevel, 'today' as which 
     from today 
    ) 
    ) t 
group by stockNumber 
having min(StockLevel) <> max(stockLevel) and count(*) = 2 
0
select T.StockNumber, T.StockLevel 
from Today as T 
left join Yesterday as Y 
on T.StockNumber = Y.StockNumber 
WHERE T.StockLevel <> Y.StockLevel 

的结果在这里玩:http://sqlfiddle.com/#!2/367b0/3/0

0

下面的查询将返回或者是不同的(由StockLevel)从昨天的股票,或不存在昨天(这是什么LEFTIS NULL是):

SELECT Today.* 
FROM Today LEFT JOIN Yesterday 
    ON Today.StockNumber = Yesterday.StockNumber 
WHERE 
    Today.StockLevel <> Yesterday.StockLevel 
    OR Yesterday.StockLevel IS NULL