如何从一个表和另一个表中获取唯一数据

时间:2014-12-02 18:06:01

标签: sql join

如果我想显示Order_Number data1 data2 data3(按日期更新当前更改的OtherData1,OtherData2,OtherData3)date_changed问题是我不只是一行,我为每个订单号获取多行。

我希望得到的是

1, a, f,q, cc,ccc,abc, 12/2/2014, bob
3, c, b,h, aa,aaa,abc, 12/2/2014, bob

谢谢!

我正在使用

SELECT 
    t.Order_Number, 
    cr.data1, cr.data2, cr.data3,   
    t.OtherData1, t.OtherData2, t.OtherData3,
    x.date_changed, cr.name

FROM 
   (SELECT 
        Order_Number, 
        Max(date_changed) as date_changed 
    FROM 
        table2 
    GROUP BY 
        Order_Number) x
JOIN
    table2 t ON x.date_changed = t.date_changed
LEFT JOIN
    table1 cr ON x.Order_Number = cr.Order_Number
WHERE cr.name = 'bob'

以下是示例表。

Table1

Order_Number    data1   data2   data3   name
    1            a        f      q       bob
    2            b        g      g       john
    3            c        b      h       bob    
    4            d        s      j       john

Table2

Order_Number    date_changed    OtherData1  OtherData2  OtherData3
   1             11/30/2014        aa         aaa         abc
   1             12/1/2014         bb         bbb         def
   1             12/2/2014         cc         ccc         abc
   3             12/1/2014         dd         aaa         def
   2             11/30/2014        dd         bbb         abc
   2             12/1/2014         ss         ccc         def
   3             12/2/2014         aa         aaa         abc
   4             11/26/2014        fc         wer         wsd

2 个答案:

答案 0 :(得分:1)

如果要检索唯一的行,您对config_log(Table2)的加入需要包含整个复合键。

JOIN
    conf_log t ON x.date_changed = t.date_changed
    And x.Order_Number = t.Order_number

答案 1 :(得分:0)

我认为你需要有2个子查询:

SELECT 
    Data.Order_Number, 
    Data.data1, Data.data2, Data.data3,   
    Data.OtherData1, Data.OtherData2, Data.OtherData3,
    Data.date_changed, Data.name
  FROM 
   (SELECT 
        Order_Number, 
        Max(date_changed) as date_changed 
    FROM 
        table2 
    GROUP BY 
        Order_Number) x
JOIN (SELECT 
    t.Order_Number, 
    cr.data1, cr.data2, cr.data3,   
    t.OtherData1, t.OtherData2, t.OtherData3,
    t.date_changed, cr.name
    FROM table2 t 
    JOIN table1 cr 
    ON t.Order_Number = cr.Order_Number) AS Data
ON x.date_changed = data.date_changed
AND x.Order_Number = data.Order_number
WHERE cr.name = 'bob'

你在where子句中有cr.name这一事实意味着LEFT JOIN与JOIN具有相同的效果。