在使用内部联接

时间:2015-11-05 14:54:41

标签: sql oracle oracle11g

假设我有两张桌子(A和B):

A:
|   ID   | column1   |   B_ID   |  column2 | ... | column x |
|   1    | xxx       |   25     | xxxx...

B:
|  ID    | B_ID |  C    |  column 1  | ...   | column x|
|  2     | 25   |   55  |   xxxxxxx
|  3     | 25   |   66  |   xxxxxxx (data in all other columns are the same, 

只有C列不同)  我在内部加入(使用B_ID)。

因为在表B中有两个匹配的内部连接行,所以我得到两行。即使使用DISTINCT也会发生这种情况,因为C列中的数据不同。是否有某种方法以某种方式在新值中加入不同的C值(例如" 53,56")或将C值66放在另一列(如C_1)中,因此我只能有一行作为结果?

2 个答案:

答案 0 :(得分:0)

SELECT *
FROM
A T1 INNER JOIN
(SELECT ID,B_ID,GROUP_CONCAT(C),column1,column2,column3,..,columnx
FROM B 
GROUP BY B_ID) T2 ON T2.B_ID=T1.B_ID

希望这会有所帮助..

答案 1 :(得分:0)

取决于您使用的SQL版本: Oracle - 如果在Oracle 11G之前,请查看asktom.com上的STRING_AGG()函数,之后内置为LISTAGG()。 mysql-看看group_concat() sql server - Simulating group_concat MySQL function in Microsoft SQL Server 2005?

相关问题