逆天了!极端简单的left join 返回数据不对?

Leedye123 2013-06-02 10:01:04
A 表共有2条ID不同的数据,与B表关联后, 居然返回多于2条数据,是怎么回事?

如:表A:

Aid Aname
1 1A
2 2A

表B:

Bid Bname
1 1B
2 2B
3 3B


进行左联接:

SELECT a.* from A a Left join B b on a.Aid =b.Bid

左联接后返回结果:

Aid Aname Bid Bname
1 1A 1 1B
2 2A 2 2B
3 3B

怎么回事呢?
...全文
398 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010412956 2013-06-03
  • 打赏
  • 举报
回复
对于楼主的这个问题,我只能说: 无图无真相
Leedye123 2013-06-03
  • 打赏
  • 举报
回复
非常感谢楼上各位的回复,我们现在用的oracle 11G 出现了各种问题: 1.left join 返回的结果不正确;(返回的记录行数多于左表的总记录数,如上所述); 2.delete删除某条记录数据且commit提交后,当时查询该记录查不出来,但过一会(20秒内)该记录又出现了. 3.修改表结构(如增减字段)提交后,当时貌似可以了,过会(20秒内)多刷新几下却又还原了! 这些个问题很诡异啊!各位有何高见呢?
sych888 2013-06-03
  • 打赏
  • 举报
回复
SQL> create table b(bid int,bname varchar2(20)); 表已创建。 SQL> insert into a select 1,'1a' from dual; 已创建 1 行。 SQL> insert into a select 2,'2a' from dual; 已创建 1 行。 SQL> commit; 提交完成。 SQL> insert into b select 1,'1b' from dual; 已创建 1 行。 SQL> insert into b select 2,'2b' from dual; 已创建 1 行。 SQL> insert into b select 3,'3b' from dual; 已创建 1 行。 SQL> commit; SQL> select * from a; AID ANAME ---------- -------------------- 1 1a 2 2a SQL> select * from b; BID BNAME ---------- -------------------- 1 1b 2 2b 3 3b SQL> select a.* from a left join b on a.aid=b.bid; AID ANAME ---------- -------------------- 1 1a 2 2a
NIan_jun 2013-06-03
  • 打赏
  • 举报
回复
一定是楼主打开的方式不对,这不可能
Leedye123 2013-06-02
  • 打赏
  • 举报
回复
不好意思,查询语句应该是 SELECT * from A a Left join B b on a.Aid =b.Bid 我也觉得奇怪! 我的意思是:oracle 的left join 应该也是返回左表所有记录以及右表符合条件的记录集吧?!
虫洞 2013-06-02
  • 打赏
  • 举报
回复
多检查自己写的脚本,就知道是怎么回事了 像你写的查询语句绝对不会返回你写的结果的 查询a.* 怎么会有Bid Bname

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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