首页 新闻 会员 周边

家人们求助求助,这个sql怎么写,能不能实现。

0
悬赏园豆:50 [待解决问题]

B表和C表是A表的子表,B与C没有关联,B表和C表都有一个简单序列号,1,2,3这种。

我现在想做一个组合查询,效果就是如图。

 

目前,我是这样写的,可是当B两条和C两条时并不如我预计的合并2条,而是出现4数据

select A.信息,B.信息,C.信息
from A
join B on A.Id = B.AId
join C on A.Id = C.AId

 我试图用序列号把B和C关联起来,在BC都是两条时结果正确,但是在B一条C两条的情况下,只能查出有对应序号的一条数据,C的序列2的数据就查不出来。

select A.信息,B.信息,C.信息
from A
join B on A.Id = B.AId
join C on A.Id = C.AId and B.序列号 = C.序列号

 

你猜丶的主页 你猜丶 | 初学一级 | 园豆:135
提问于:2024-06-26 18:48
< >
分享
所有回答(5)
0

来自AI:你好!根据你提供的信息,你想要实现一个效果,即将表B和表C的数据组合成一条记录,以满足一对一关系。你已经尝试使用序列号来关联B和C表,但在B表有一条记录,而C表有两条记录的情况下出现了问题。为了解决这个问题,你可以尝试使用窗口函数和ROW_NUMBER()函数,以确保在B表和C表中匹配相同的行。
以下是可能的解决方案:

SELECT A.信息, B.信息, C.信息
FROM A
JOIN (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY AId ORDER BY 序列号) AS rowNum
    FROM B
) AS B ON A.Id = B.AId
JOIN (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY AId ORDER BY 序列号) AS rowNum
    FROM C
) AS C ON A.Id = C.AId AND B.rowNum = C.rowNum

这里,我们在B表和C表中分别使用窗口函数ROW_NUMBER()为每个AId分配一个行号(按序列号升序排序)。然后,将B表和C表的行号相同的行(即相同的序号)连接起来,确保了一对一的关系。
希望这个解决方案对你有所帮助!如果你有任何其他问题,请随时提问。

Technologyforgood | 园豆:7199 (大侠五级) | 2024-06-26 20:47
0

把 B C 表先连接,再和 A 表连接 不就好了吗?

flysun027 | 园豆:202 (菜鸟二级) | 2024-06-27 16:15
0

查询出的结果集如果是一样的话,可以使用distinct进行去重,例如:select distinct * from table_1

星小梦 | 园豆:298 (菜鸟二级) | 2024-06-28 14:28

哎,不能,我仔细看了下,发现他是这样对应的,没重复,就跟那种有几种组合的数学题一样。

 

支持(0) 反对(0) 你猜丶 | 园豆:135 (初学一级) | 2024-06-28 14:39
0

你这表设计不行呐,你这要把没关系的B、C整到一起需要一个表来存A、B、C三者的关系啊。

偷走dalao的红豆 | 园豆:214 (菜鸟二级) | 2024-06-28 16:21

害,B,C根本没关系,都是A表的子表,客户愣是想做报表,给整成一条数据难办。

支持(0) 反对(0) 你猜丶 | 园豆:135 (初学一级) | 2024-06-28 16:27

@你猜丶: 傻瓜点,在填充报表数据的时候,逐条塞数据呗。

支持(0) 反对(0) 偷走dalao的红豆 | 园豆:214 (菜鸟二级) | 2024-06-28 16:35
0

试试这样写呢?

select distinct a.id,a.info, b.id,b.info,c.id,c.info
from ta a
left join tb b on a.id=b.aid
left join tc c on a.id =c.aid

景伟·郭 | 园豆:7 (初学一级) | 2024-07-01 09:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册