如何将此LEFT JOIN返回的行数限制为一个?

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的本质

Chr*_*ray 8

如果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)


Jus*_*ave 6

你可以这样做.

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向分析函数添加一个子句.