数据库如何单表查询得到两个相关联表的所有数据

图片说明A表有两个字段 id,bID. 其中bID,是b表的主键
B表有两个字段 id,bName.

问现在如何才查训条件中输入bName的时候能将与a相关的结果都带出来,并且只能使用单表查询,不能使用外键

*B表的name,是可以出现重复的数据的

7个回答

好久没有写过了,不知道对不对,逻辑应该没问题
select A.id,A.bID from table A where A.bID = (selsct id from B where bName = 'zhangsan')

JAVA_Aaron1314
华少丶 select A.column1,A.column2, B.columnN ,C.columnN from tableA inner join tableB on tableB.** = tableA.*** inner join tableC on table A.**= tableC.** 
接近 2 年之前 回复
qq_36816643
qq_36816643 回复qq_31840023: 我的语句对吗?如果正确的话望采纳,因为等着用积分下载资料
大约 2 年之前 回复
qq_36816643
qq_36816643 回复onlysanshao: 忘记名字是可以重复的了,把=改成in就可以了吧。select A.id,A.bID from table A where A.bID in (selsct id from B where bName = 'zhangsan')
大约 2 年之前 回复
qq_36816643
qq_36816643 回复qq_31840023:要查询的名字如果有重名,结果就是多个,否则只有一个
大约 2 年之前 回复
qq_36816643
qq_36816643 回复qq_31840023: 忘记名字是可以重复的了,把=改成in就可以了吧。select A.id,A.bID from table A where A.bID in (selsct id from B where bName = 'zhangsan')
大约 2 年之前 回复
onlysanshao
onlysanshao 这样写有问题啊,bname有可能重复,如果bid 查出多个就报错了
大约 2 年之前 回复
qq_31840023
神言如殇 我也是这么用的, 我是先通过名字查询出id的集合, 之后a表在使用这个id集合得出想要的数据, 但是感觉有点怪,因为A表id本身就可以查询B表的主键, 如果在加上姓名的话, 就会形成 and bID=1 and bID in(1,2,3,4,5)
大约 2 年之前 回复

select a.*,b.* from a inner join b on a.id=b.id

只能使用单表查询?不知道我理解的对不对哈, 我觉得你可以建个视图 create view ab as select ta.id aid,tb.id bid,tb.name bname from b tb left join a ta on tb.id = ta.bid

onlysanshao
onlysanshao 回复qq_31840023: 嗯 ,理解 关联用的不好贼坑,我之前做过一个项目,一般都通过字段冗余或者功能设计来规避表关联
大约 2 年之前 回复
qq_31840023
神言如殇 怎么说吧 ,因为公司的一个项目 , 是不允许创建任何新的sql,语句以及修改数据库结构的,只能使用mybatis生成的一些sql,进行查询的, 不允许外键的原因是,怕外键导致查询数据,造成查询时间过长
大约 2 年之前 回复

select * from a ta where exists select id from b tb where ta.bid = tb.id and tb.name = '???' 或者这样?

qq_36816643
qq_36816643 ta.bid = tb.id这样还是用到外键了啊
大约 2 年之前 回复

完全外连接:select * from a full join b on a.id=b.id

select A.column1,A.column2, B.columnN ,C.columnN from tableA inner join tableB on tableB.** = tableA.*** inner join tableC on table A.**= tableC.** 

select t1.* t2.* from table t1, table t2 where t1.id = t2.bID

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