連線查詢中不等式的運用

kitesky發表於2006-12-06

假設有這樣一個例項:
create table a(dept_id int, user_id int)
insert into a select 1, 1
insert into a select 1, 2
insert into a select 1, 13
insert into a select 1, 4

insert into a select 2, 4
insert into a select 2, 1
insert into a select 2, 13

insert into a select 3, 1
insert into a select 3, 10
insert into a select 3, 4

select * from a

表a記錄著dept和user的關係,2個dept中只要有2個以上的相同user,那麼我們就認為這2個dept有關聯,把這樣的dept找出來,返回:

dept_id dept_id
1 2
1 3
2 3

(注意只保留一種對應情況,剔除掉重複情況)

實際案例:
透過人員比較來確定單位是否相同
其中只要有三個以上相同的人員,我們就認為是同一個單位了

[@more@]

SQL如下,注意這裡使用"
select x.dept_id as aa, y.dept_id as bb
from a x, a y
where x.user_id = y.user_id and x.dept_id < y.dept_id
group by x.dept_id, y.dept_id
having count(*) >= 2
order by aa

可以和以下SQL比較:
select x.dept_id as aa, y.dept_id as bb
from a x, a y
where x.user_id = y.user_id and x.dept_id <> y.dept_id
group by x.dept_id, y.dept_id
having count(*) >= 2
order by aa

第一條SQL只取x中dept_id小於y中dept_id的記錄,過濾了重複記錄!很巧妙。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66009/viewspace-881832/,如需轉載,請註明出處,否則將追究法律責任。

相關文章