WilliamKZhy 2017-09-08 09:45 采纳率: 0%
浏览 2194

如何在三个表进行关联查找出想要的数据?

为了方便说明,我以下将简单描述表名和列名。
现在有三个表,基础数据表A,基础数据详细内容表B,进阶数据表C。,三个表里面都需要用到两个列。
A表里:信息编码code(和B表的内容关联),标注编码ident(和C表的内容关联)。
B表里:信息编码code,信息详情content。
C表里:标注编码ident,信息详情content。
现在我希望通过C表的数据,去回溯找到对应的B表数据。查找到的的结果类似如下(一个基础数据可能对应多个进阶数据):
基础数据B1,进阶数据C1。
基础数据B1,进阶数据C2。
基础数据B1,进阶数据C3。
基础数据B2,进阶数据C4。
基础数据B3,进阶数据C5。
基础数据B4,进阶数据C6。
基础数据B4,进阶数据C7。
我自己写的sql有三个版本,如下:
版本一:------------------------------------------------------------
SELECT 临时表k.content,表C.CONTENT FROM 表C LEFT JOIN (

SELECT 表A.IDENT ident,表B.CONTENT content
FROM 表B INNER JOIN 表A ON 表A.CODE = 表B.CODE

) 临时表k ON 临时表k.ident = 表C.IDENT
版本二:------------------------------------------------------------
WITH 临时表k AS (
SELECT 表C.CONTENT content, 表C.IDENT IDENT FROM 表C
)
SELECT 表B.CONTENT,临时表k.content
FROM 临时表k, 表B
WHERE 表B.CODE IN (

SELECT code FROM 表A
WHERE 表A.IDENT IN(
SELECT IDENT FROM 临时表k
)
)
版本三:-----------------------------------------------------------
select 表B.content,临时表k.content FROM (

SELECT 表A.code code,临时表L.CONTENT content FROM (
SELECT 表C.IDENT IDENT,表C.CONTENT CONTENT FROM 表C
) 临时表L LEFT JOIN 表A ON 表A.IDENT = 临时表L.IDENT
) 临时表k LEFT JOIN 表B ON 表B.CODE = 临时表k.code

以上三个版本在通过表C对应获取表B数据的时候,都能正确获取,但是当一起对应输出的时候,数据就不对了。
例如本来表C的数据在300个,正确获取到表B的数据应该是200多个,然后汇总对比在一起应该是300行输出,但是汇总输出是4万多个,我个人觉得应该是笛卡尔积的问题,但是不知道错误出现在哪儿,求指教!

  • 写回答

4条回答

  • xuz_Ben 2017-09-08 09:51
    关注

    你用inner join 试试

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器