因此,我认为我已经看到了解决这一然而他们都是很复杂的查询。 我在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
我需要做的是加入外派= ASSIGNMENT_GROUP这两个表,但只有1个返回行。
当我做了左连接我得到三个行返回beaucse是兴田的本质左连接
如果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
你可以做这样的事情。
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 )
该分区中的数据table2
通过assignment_group
,然后随意排列他们拉每一个任意行assignment_group
。 如果你关心返回哪一行(或者,如果你想返回行确定的),你可以添加一个ORDER BY
子句来解析功能。
我想你需要的是使用GROUP BY
对ASSIGNMENT_GROUP
场。
http://www.w3schools.com/sql/sql_groupby.asp
在MySQL中,你可以只GROUP BY分配和完成。 甲骨文更为严格,并拒绝只是选择(在不确定的方式)的三排的哪些值进行选择。 这意味着所有返回的列必须是GROUP BY的一部分,或者受到的骨料函数(COUNT,MIN,MAX ...)
当然,你可以选择根本不关心,并使用一些骨料功能上返回的列。
select TICKET_ID, ASSIGNMENT, MAX(MANAGER_NAME), MAX(USER)
from T1
left join T2 on T1.ASSIGNMENT=T2.ASSIGNMENT_GROUP
group by TICKET_ID, ASSIGNMENT
如果你这样做,我会认真怀疑你需要摆在首位的JOIN。
MySQL也可以在你想组值的列中的字符串连接的情况下GROUP_CONCAT帮助(人类常常喜欢这样),但与甲骨文是惊人的复杂 。
使用作为已经建议一个子查询的选项, 看看这里的一个例子。 它也可以让你的子查询中选择顶行之前排序。
在Oracle中,如果你想要个结果,你可以使用ROWNUM
语句获取查询例如第N个值:
SELECT *
FROM TABLEX
WHERE
ROWNUM = 1 --gets the first value of the result
这种单一的查询问题是,甲骨文不会返回以相同的顺序中的数据。 所以,你必须奥德之前使用ROWNUM您的数据:
SELECT *
FROM
(SELECT * FROM TABLEX ORDER BY COL1)
WHERE
ROWNUM = 1
对于你的情况,看起来像你只需要1分的结果,所以你的查询应该是这样的:
SELECT *
FROM
TABLE1 T1
LEFT JOIN
(SELECT *
FROM TABLE2 T2 WHERE T1.ASSIGNMENT = T2.ASSIGNMENT_GROUP
AND
ROWNUM = 1) T3 ON T1.ASSIGNMENT = T3.ASSIGNMENT_GROUP