作者adrianshum (Alien)
看板Database
标题Re: [SQL ] 语法逻辑问题
时间Tue Sep 30 15:40:43 2014
※ 引述《oklp1415 (天生我材)》之铭言:
: (针对 SQL 语言的问题,用这个标题。请用 Ctrl+Y 砍掉这行)
: 资料库名称:MySQL
: 资料库版本:9
: 内容/问题描述:
: 请列出有经手过「123科技」这位客户订单的所有业务员的编号与姓名(业务员的资料不
: 可重复列出)。
: 客户
: 客户编号 ----->key
: 名称
: 电话
: 地址
: 订单
: 订单编号 ---->key
: 客户编号 ----->外键
: 业务员编号 ------>外键
: 订单日期
: 金额
: 业务员
: 业务员编号 ------>key
: 姓名
: 地址
: 电话
: 解1:
: SELECT DISTINCT 姓名
: FROM 业务员 s, 订单编号 o, 客户编号 c
: WHERE c.名称 = '123科技' AND c.客户编号 = o.客户编号 AND
: o.业务员编号 = s.业务员编号
: 解2:
: selcet DISTINCT s.编号,s.姓名
: from 业务员 s
: where not exist
: ( select *
: from 客户 c
: where not exist
: ( select *
: from 订单 t
: where t.客户编号=c.客户编号 AND c.业务编号=s.业务编号 AND
: c.名称 = '123科技'));
: 请问这样的解法都对吗??
: 我是偏向解2的解法,感觉是要列出全部相关资料的123科技,不知道我想法是否有错呢?
: 感谢!!
subselect 九成会跑得比较慢。
个人不会用上面两种解,写 ansi join 比较清楚:
select distinct sales.编号, sales.姓名
from 订单 order
inner join 业务员 sales
on sales.业务编号 = order.业务编号
inner join 客户 client
on client.客户编号 = order.客户编号
where client.名称 = '123科技'
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 210.0.147.1
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Database/M.1412062846.A.7EE.html