求一条关联多表查询的sql.

现有三张表。所有字段类型都为字符串类型。
a表中有字段fv_code fv_path fv_type
b表中有字段fv_code fv_name

c表中也有字段fv_code fv_name

a.fv_code = b.fv_code或者a.fv_code = c.fv_code
b.fv_comm = c.fv_comm

现在我要得到a.fvcode,a.fv_path,a.fv_type以及a.fv_code所对应的fv_name
求帮助

10个回答

你给出的关系b、c两张表不是就可以得出?

select a.fvcode,a.fv_path,a.fv_type,b.fv_name from a as a
where 1=1
left join b as b on a.fv_code=b.fv_code
left join c as c on a.fv_code=c.fv_code
因为没数据,没在navcat里测,大致就这样,因为描述整的我有点模糊,按理应该两张数据表,一张中间表,但是你的 b表,c表字段一样,不知道有什么用

zw605068753
CaperJasmine 不重复。虽然b和c表字段一样。但是实际的值不是一样的。比如这样,b中存放的是省的信息,c中存放的是市的信息。但是省就是省,市就是市,不能越界。大致就这个意思把哈哈。但是a表中的信息既包含了省的,又包含了市的一点,所以就会造成我这样的情况。。
2 年多之前 回复

select a.fvcode,a.fv_path,a.fv_type,b.fv_name from a as a
where 1=1
left join b as b on a.fv_code=b.fv_code
left join c as c on a.fv_code=c.fv_code

我晕,你这bc两个表是重复了?满足你的需要只要b或者c一张表就OK了啊,没必要多张表
select a.fvcode,a.fv_path,a.fv_type ,c.fv_name from a left join c on a.fv_code = c.fv_code

zw605068753
CaperJasmine 不重复。虽然b和c表字段一样。但是实际的值不是一样的。比如这样,b中存放的是省的信息,c中存放的是市的信息。但是省就是省,市就是市,不能越界。大致就这个意思把哈哈。但是a表中的信息既包含了省的,又包含了市的一点,所以就会造成我这样的情况。。
2 年多之前 回复

首先,你没说清楚 b表 和 c表的关系,如果这两个表中的 fv_code 和 fv_name 字段对应关系和数据都是一致的,即这两个字段是啷个表中的冗余字段。那么按照我这个SQL就可以,我只是手动写上了,需要你自己进行验证。
SELECT a.fv_code, a.fv_path,a.fv_type, b.fv_name FROM a LEFT JOIN b ON a.fv_code = b.fv_code
我这里使用的是左连接,没有进行分组和条件筛选,如果你 a表中的 fv_code 有重复后面数据也有重复。请注意!

u014682573
溜肉段_ 回复CaperJasmine: 那你表b和表c的 fv_code字段值是相同的吗,如果表c 与表a或表b没有关联的话,就没有办法将三个表关联到一起
2 年多之前 回复
zw605068753
CaperJasmine 不重复。虽然b和c表字段一样。但是实际的值不是一样的。比如这样,b中存放的是省的信息,c中存放的是市的信息。但是省就是省,市就是市,不能越界。大致就这个意思把哈哈。但是a表中的信息既包含了省的,又包含了市的一点,所以就会造成我这样的情况。。
2 年多之前 回复

select * from (select * from b.fv_code,b,fv_name from b
left join a on a.fv_code = b.fv_code) a
left join
(select * from c.fv_code,c.fv_name from c
left join a on a.fv_code = c.fv_code) b on a.fv_code = b.fv_code

select a.fvcode,a.fv_path,a.fv_type ,c.fv_name from a left join b on a.fv_code = b.fv_code

qq_27836205
Jordan裔 写错了 不是c.fv_name 是 b.fv_name
2 年多之前 回复

select nvl(m.fv_code,m._fv_code) fv_code,nvl(m.fv_name,n.fv_name) from (select * from b.fv_code,b,fv_name from b
left join a on a.fv_code = b.fv_code) m
left join
(select * from c.fv_code,c.fv_name from c
left join a on a.fv_code = c.fv_code) n
上一个回答不对,试一下这个

select a.fvcode,a.fv_path,a.fv_type,c.fvname as c_fvname,b.fvname as b_fvname from a
left out join b on a.fv_code = b.fv_code or a.fv_code = c.fv_code
left out join c on b.fv_comm = c.fv_comm
不知道对不对,你试一下,哈哈

SELECT
fv_code,fv_path,fv_type,fv_name
FROM
a AS AA
JOIN b AS BB ON BB.fv_cod=AA.fv_cod
JOIN c AS CC ON CC.fv_cod=BB.fv_cod

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐