关于主键和外键的查询

ibatsiSpring 2009-09-02 12:39:03
问题如下:
在A表有pid(主键),pname
在B表中有cid,cname,pid(外键)

我想根据A表的pid查询B表的pid所对应的cname
可是出现问题

我的sql语句
select cname from A,B
where A.pid=B.pid

这样查询出来有N条数据,相当于A.pid与B表中每一条数据都查询得出的结果,虽然结果都是一样

我使用关键字distinct倒是能达到我的要求,但是这样效率会不会下降?
我的sql语句如下
select distinct cname from A,B
where A.pid=B.pid

请问各位朋友有什么其他好的办法吗?
谢谢
...全文
166 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
inthirties 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 snowmote 的回复:]
distinct

group by
[/Quote]

同意
xfl039 2009-09-02
  • 打赏
  • 举报
回复
cname重复的话是很正常的啊!

B表中的数据cid应该是主键,也就是说是唯一性的字段。

当你用select cname from A,B
where A.pid=B.pid
查询出来的结果是对的,说明数据和SQL也是对的,你用distinct只是去重而已。当然了,你想要不重复的数据则另当别论。
淅沥加油 2009-09-02
  • 打赏
  • 举报
回复
学习
zcs_1 2009-09-02
  • 打赏
  • 举报
回复
我觉得这是最普通的主外键关联,不应该用distinct,楼主能否给出个例子来,比如部门和员工间的关系,或学生和课程的关系等。
cosio 2009-09-02
  • 打赏
  • 举报
回复
不会有什么影响的!
SnowMote 2009-09-02
  • 打赏
  • 举报
回复
distinct

group by
taipingyang2003 2009-09-02
  • 打赏
  • 举报
回复
没有影响
阿三 2009-09-02
  • 打赏
  • 举报
回复
select cname
from(
select cname,row_number() over(partition by cname) rn from A,B
where A.pid=B.pid)
where rn=1

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧