※ 引述《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://www.ptt.cc/bbs/Database/M.1412062846.A.7EE.html