客户表corp
corp_id corp_name
1 上海大众
2 长江实业
3 东方航空
---
联系人表
linkman_id linkman_name linkman_tel corp_id(所属客户ID) linkman_main(是否是主联系人,1表示是)
1 张飞 123456789 1 1
2 小强 987654321 1 1
3 小宝 123123123 2 1
4 王麻子 456456456 2 0
5 张德帅 789789789 3 0
---
如果某客户对应联系人表中有多个主联系人,将第一个做为默认联系人
如果某客户对应联系人表中只有一个主联系人,将此做为默认联系人
如果某客户对应联系人表中没有主联系人,将第一个联系人作为默认联系人 最后得到
corp_id corp_name linkman_id linkman_name linkman_tel
1 上海大众 1 张飞 123456789
2 长江实业 3 小宝 123123123
3 东方航空 5 张德帅 789789789
corp_id corp_name
1 上海大众
2 长江实业
3 东方航空
---
联系人表
linkman_id linkman_name linkman_tel corp_id(所属客户ID) linkman_main(是否是主联系人,1表示是)
1 张飞 123456789 1 1
2 小强 987654321 1 1
3 小宝 123123123 2 1
4 王麻子 456456456 2 0
5 张德帅 789789789 3 0
---
如果某客户对应联系人表中有多个主联系人,将第一个做为默认联系人
如果某客户对应联系人表中只有一个主联系人,将此做为默认联系人
如果某客户对应联系人表中没有主联系人,将第一个联系人作为默认联系人 最后得到
corp_id corp_name linkman_id linkman_name linkman_tel
1 上海大众 1 张飞 123456789
2 长江实业 3 小宝 123123123
3 东方航空 5 张德帅 789789789
if object_id('[corp]') is not null drop table [corp]
go
create table [corp]([corp_id] int,[corp_name] varchar(8))
insert [corp]
select 1,'上海大众' union all
select 2,'长江实业' union all
select 3,'东方航空'
if object_id('[联系人表]') is not null drop table [联系人表]
go
create table [联系人表]([linkman_id] int,[linkman_name] varchar(6),[linkman_tel] int,[corp_id] int,[linkman_main] int)
insert [联系人表]
select 1,'张飞',123456789,1,1 union all
select 2,'小强',987654321,1,1 union all
select 3,'小宝',123123123,2,1 union all
select 4,'王麻子',456456456,2,0 union all
select 5,'张德帅',789789789,3,0
---查询---
select a.corp_id,a.corp_name,b.linkman_id,b.linkman_name,b.linkman_tel
from corp a
left join [联系人表] b
on a.corp_id=b.corp_id
and not exists(
select 1
from 联系人表
where corp_id=b.corp_id
and (linkman_main>b.linkman_main or linkman_main=b.linkman_main and linkman_id<b.linkman_id)
)---结果---
corp_id corp_name linkman_id linkman_name linkman_tel
----------- --------- ----------- ------------ -----------
1 上海大众 1 张飞 123456789
2 长江实业 3 小宝 123123123
3 东方航空 5 张德帅 789789789(所影响的行数为 3 行)
-- Author :fredrickhu(小F,向高手学习)
-- Date :2010-02-03 18:22:43
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[客户表]
if object_id('[客户表]') is not null drop table [客户表]
go
create table [客户表]([corp_id] int,[corp_name] varchar(8))
insert [客户表]
select 1,'上海大众' union all
select 2,'长江实业' union all
select 3,'东方航空'
--> 测试数据:[联系人表]
if object_id('[联系人表]') is not null drop table [联系人表]
go
create table [联系人表]([linkman_id] int,[linkman_name] varchar(6),[linkman_tel] int,[corp_id] int,[linkman_main] int)
insert [联系人表]
select 1,'张飞',123456789,1,1 union all
select 2,'小强',987654321,1,1 union all
select 3,'小宝',123123123,2,1 union all
select 4,'王麻子',456456456,2,0 union all
select 5,'张德帅',789789789,3,0
--------------开始查询--------------------------
select
a.corp_id,a.corp_name,b.linkman_id,b.linkman_name,b.linkman_tel
from
[客户表] a
left join [联系人表] b on
a.corp_id=b.corp_id
and
not exists(select
1
from
[联系人表]
where
(corp_id=b.corp_id
and
linkman_main>b.linkman_main) or(corp_id=b.corp_id and linkman_main=b.linkman_main and linkman_id<b.linkman_id))----------------结果----------------------------
/* corp_id corp_name linkman_id linkman_name linkman_tel
----------- --------- ----------- ------------ -----------
1 上海大众 1 张飞 123456789
2 长江实业 3 小宝 123123123
3 东方航空 5 张德帅 789789789(3 行受影响)
*/