sql-加入时忽略重复项

时间:2018-10-28 07:54:00

标签: sql join

我有两个桌子。 表1是1591行。 Table2是270行。

我想根据它们之间的某种条件从Table2中获取特定的列数据,并且还要排除Table2中的重复项。我的意思是联接表,但即使条件发生的时间超过时间,也只能从Table2中获得一个值。结果应为1591行。

我尝试将“左”,“右”,“内”连接起来,但是数据来的或多或少都是1591。

示例 表1

type,address,name
40,blabla,Adam
20,blablabla,Joe

表2

type,currency
40,usd
40,gbp
40,omr

加入“类型” 结果

type,address,name,currency
40,blabla,name,usd
20,blblbla,Joe,null

4 个答案:

答案 0 :(得分:0)

尝试一下。这是标准的SQL,因此,它应该可以在您的rdbms系统上使用。

select * from Table1  AS t
LEFT OUTER JOIN Table2 AS y ON t.[type] = y.[type] and y.currency IN (SELECT MAX(currency) FROM Table2 GROUP BY [type])

如果您想控制加入哪种货币,请考虑通过添加一个新的活动/非活动列并相应地修改JOIN子句来更改Table2。

答案 1 :(得分:0)

尝试它必须工作

select *
from
Table1 h
inner join 
(select type,currency,ROW_NUMBER()over (partition by type order by 
currency) as rn
from 
Table2
) sr on
sr.type=h.type
and rn=1

答案 2 :(得分:0)

如果受支持,您可以使用outer apply

select a.type, a.address, a.name, b.currency
from Table1 a
outer apply (
    select top 1 currency
    from Table2
    where Table2.type = a.type
) b

答案 3 :(得分:0)

我执行此操作的典型方法是使用相关子查询。 保证第一张表中的所有行均被保留。如果第二行返回了多行,则会产生错误。

所以:

select t1.*,
       (select t2.currency
        from table2 t2
        where t2.type = t1.type
        fetch first 1 row only
       ) as currency
from table1 t1;

您没有指定要使用的数据库,因此它使用标准语法返回一行。某些数据库改为使用limittop