Bos*_*OSX 9 sql oracle join limit
所以我认为我已经看到了解决方案,但它们都是非常复杂的查询.我在oracle 11g中作为参考.
我所拥有的是一个简单的一对多联接,但是我不需要那么多.我只是希望左表(一个)只加入满足连接条件的任何1行...不是很多行.
我需要这样做,因为查询是汇总的,因此如果我做正常的左连接,我得到5行,我应该得到1.
所以示例数据如下:
TABLE 1:
-------------
TICKET_ID ASSIGNMENT
5 team1
6 team2
TABLE 2:
-------------
MANAGER_NAME ASSIGNMENT_GROUP USER
joe team1 sally
joe team1 stephen
joe team1 louis
harry team2 ted
harry team2 thelma
Run Code Online (Sandbox Code Playgroud)
我需要做的是在ASSIGNMENT = ASSIGNMENT_GROUP上加入这两个表,但只返回1行.
当我做左连接时,我得到三行返回beaucse,这是hte left join的本质
如果oracle支持行号(分区依据),则可以创建一个子查询,选择行等于1的位置.
SELECT * FROM table1
LEFT JOIN
(SELECT *
FROM (SELECT *,
ROW_NUMBER()
OVER(PARTITION BY assignmentgroup ORDER BY assignmentgroup) AS Seq
FROM table2) a
WHERE Seq = 1) v
ON assignmet = v.assignmentgroup
Run Code Online (Sandbox Code Playgroud)
你可以这样做.
SELECT t1.ticket_id,
t1.assignment,
t2.manager_name,
t2.user
FROM table1 t1
LEFT OUTER JOIN (SELECT manager_name,
assignment_group,
user,
row_number() over (partition by assignment_group
--order by <<something>>
) rnk
FROM table2) t2
ON ( t1.assignment = t2.assignment_group
AND t2.rnk = 1 )
Run Code Online (Sandbox Code Playgroud)
该分区中的数据table2通过assignment_group,然后任意排列他们拉每一个任意行assignment_group.如果您关心返回哪一行(或者如果您想使行返回确定性),则可以ORDER BY向分析函数添加一个子句.