我有两个桌子。 表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
答案 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;
您没有指定要使用的数据库,因此它使用标准语法返回一行。某些数据库改为使用limit
或top
。