作者danielguo (Daniel Guo)
看板Database
标题Re: [SQL ] 交集问题
时间Mon Oct 31 12:41:31 2011
※ 引述《danielguo (Daniel Guo)》之铭言:
: ※ 引述《odj (***ˋ( ̄  ̄)》之铭言:
: : 最近在写一个交集的语法,觉得自己写的不是很好,因此想请教一下是否有更好的写法
: : 我有一个资料表(table1)如下:
: : id w_id server
: : 1 3 A
: : 2 3 B
: : 3 4 B
: : 4 5 B
: : 5 3 C
: : 6 4 C
: : 7 5 C
: : 今天我想取得的是ABC三台server共有的w_id值,以上表来说,就是3
: 计算每个 w_id 有几个 server
: (假设 (w_id, server) 会重复, 不重复用 COUNT(*) 便可)
: SELECT `w_id`, COUNT(DISTINCT `server`) AS `count`
: FROM `table1`
: WHERE `server` IN ('A', 'B', 'C')
: GROUP BY `w_id`
: HAVING `count` = 3;
推 odj:可能我表达的不好让你误会了 我不是要W_ID值有几个SERVER 10/31 08:12
→ odj:而是像A有的w_id值是3 B有3,4,5 C有3,4,5 那ABC三者都有的 10/31 08:14
推 odj:的w_id值就是3 我想要抓出的是这个值 10/31 08:18
推 odj:抱歉了 还是感谢你的帮忙
这两个问题是等义的, 例如上面的例子, A:3, B:345, C:345
也就是 3:ABC, 4:BC, 5:BC
server w_id
A 3
B 3
B 4
B 5
C 3
C 4
C 5
也就是
server w_id
A 3
B 3
C 3
B 4
C 4
B 5
C 5
找 A, B, C 这三个 server 都有的 w_id 列表,
等於找一个 w_id 列表, 其中的每个 w_id 都有 A, B, C 这三个 server
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 24.19.233.135
※ 编辑: danielguo 来自: 24.19.233.135 (10/31 12:47)
1F:推 odj:屋喔 受益匪浅 非常感谢~! 10/31 13:52