SQL使用" ON"加入2个表on second table

时间:2016-08-22 05:07:22

标签: mysql sql .net

我有两个表,一个有库存,另一个有不同日期的价格表。我需要在特定日期更新表1,这可能在表2中没有,所以我需要回顾最后的可用价格。我怎样才能做到这一点。以下是我的表格:

Table1
SrNo Commodity Date         Price
1     Car      20-Aug-2015  <115>
2     Cycle    20-Aug-2015  <78>

Table2
SrNo Commodity Price Date
1     Car       100  1-Jan-2015
2     Car       120  1-Jun-2015
3     Car       115  20-Aug-2015
4     Cycle     80   10-May-2015
5     Cycle     78   10-Jun-2015

我尝试使用内部联接,但我可以将它用于Car,因为它在2015年8月20日有一个条目。我希望循环显示为78,因为它是最后一个可用价格。

有人可以建议我怎么做。

谢谢, 斯瓦特

3 个答案:

答案 0 :(得分:0)

下一个代码可以在T-SQL上运行 - 试试吧

update t1 set
  t1.Price = t2.Price 
from Table1 as t1
outer apply (
  select top 1 
    t2.Price 
  from Table2 as t2
  where t2.SrNo = t1.SrNo
  order by t2.Date desc
) t2

答案 1 :(得分:0)

试试这个:

UPDATE      a
SET         a.Price = b.Price
FROM        Table1 a
INNER JOIN  Table2 b ON a.Commodity = b.Commodity
WHERE       b.[Date] = (SELECT      MAX([Date])
                        FROM        Table2 c
                        WHERE       b.Commodity = c.Commodity
                        AND         c.[Date] <= a.[Date]
                        GROUP BY    c.Commodity)

答案 2 :(得分:0)

MySql

UPDATE Table1 
JOIN ( SELECT Commodity,Price
       FROM Table2 JOIN (SELECT Table2.Commodity,MAX(DATE) As LastDate
                  FROM Table2 
                  GROUP BY Commodity ) AS Tmp1
            ON Table2.Date = Tmp1.LastDate

) AS Tmp2
ON Tmp2.Commodity = Table1.Commodity
SET Table1 .Price = Tmp2.Price
在内部查询MAX(DATE)中计算

Tmp1以获取商品的最后可用价格

SQLFiddle Demo