oracle非等值自连接

guye1986 2013-03-15 06:21:33
Examine the data in the CUSTOMERS table:
CUSTNO CUSTNAME CITY
1 KING SEATTLE
2 GREEN BOSTON
3 KOCHAR SEATTLE
4 SMITH NEW YORK
You want to list all cities that have more than one customer along with the customer details.
Evaluate the following query:
SQL>SELECT c1.custname, c1.city
FROM Customers c1 __________________ Customers c2
ON (c1.city=c2.city AND c1.custname<>c2.custname);

答案是 join 和 right join

我在机子上试过了 确实如此,只是没想明白,求指导!
...全文
3789 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
CT_LXL 2013-11-25
  • 打赏
  • 举报
回复
#2正解,其实就是让两表连接,遍历C1表的所有记录和C2连接,如果同一城市有两个CUSTOMER,C1 和C2都会存在两条同样的记录(cut1,cut2)。当在C1中遍历到CUT1时,就会和C2的CUT2连接(c1.custname<>c2.custname这个条件去掉了CUT1),当遍历到CUT2时就会和c2中的CUT1连接,这样就实现了找出一个城市大于两个客户的信息,有个问题是,某个城市如果有超过2个客户,应该会有重复的记录吧。
  • 打赏
  • 举报
回复
join很好理解,right join是Null,但也出来。。
物润声无 2013-11-24
  • 打赏
  • 举报
回复
FROM Customers c1 __________________ Customers c2 ON (c1.city=c2.city AND c1.custname<>c2.custname) 相同的city有不止一个客户的存在,c1.custname<>c2.custname: 至少有两个客户
黑色沙丘 2013-03-22
  • 打赏
  • 举报
回复
这不就是联表查询呢吗

2,668

社区成员

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

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