我有两个数据库表:
TABLE_1(ID,ThatID,OtherField)
TABLE_2(ThatID,Field2,TheseOthers)
ID
& ThatID
是TABLE_1
& TABLE_2
。
ThatID
在TABLE_1
中重复Field2
次。 ThatID
取决于TABLE_2
上的ThatID
。
在结果中,我需要为每个TABLE_1
提取以下对象:
ThatID,Field2,Collection< OtherField>
执行此操作的SQL查询是什么?
我无法改变表结构 - 这两个是我应该处理的。
我不能使用Hibernate--我在这个系统中只有JDBC。
我正在寻找一个基于SQL的解决方案 - 而不是Java解决方案。所以,查询
OtherField
,将每个ThatID
的{{1}}值添加到集合中,然后获取
来自另一个表的匹配Field2
不是解决方案。
我对SQL很生疏,并在寻找有效的解决方案。
TIA。
// =================================
修改
TABLE_1:
ID:ThatID OtherField
1 z4 other87
2 z4 other39
3 z4 this1
4 x2 axy66
5 x2 tyz44
TABLE_2:
ThatID Field2 ThatOthers
x2 apples somethingElse
z4橘子其他人
y4 Pears yetAnother
应生成2个对象:
z4,苹果,< Other87,Other39,this1>
x2,橙子,< axy66,tyz44>
// =============================================
EDIT2:
在此示例中,我是否可以直接从查询中为OtherField
的{{1}}行ThatID
行添加多个TABLE_1
条目?我正在使用SQL服务器。
答案 0 :(得分:0)
根据我了解您的问题,您需要根据名为ThatID
的常用列加入以匹配您的表格。
SELECT DISTINCT TABLE_1.ThatID, Field2,
stuff((
select ',' + TABLE_1.otherfield
from TABLE_1
where TABLE_2.thatid = TABLE_1.thatid
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM TABLE_2 INNER JOIN TABLE_1 ON TABLE_2.ThatID = TABLE_1.ThatID
GROUP BY TABLE_1.ThatID,TABLE_2.ThatID, Field2, OtherField
答案 1 :(得分:0)
您是否在寻找group_concat
(根据您的问题历史假设mysql
- 其他数据库采用类似方法)?
select that.id, that.field2, group_concat(this.otherfield)
from that
inner join this on that.id = this.thatid
group by that.id, that.field2
修改,根据您对sql server
的修改,您正在寻找stuff
for xml
{/ 1>}:
select that.id, that.field2,
stuff((
select ',' + this.otherfield
from this
where that.id = this.thatid
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
from that