日期:2014-05-18  浏览次数:20670 次

求助这样一条语句
有A表和B表,A表中有字段主键码,题名,书号,出版社等;B表中有字段主键码,子键码,条码号等。
A表中有数据如下:
主键码 题名 书号 出版社
  1 傲慢与偏见 72042006 东北出版社
  2 例慢与偏见 72042006 东北出版社
  3 美国企业500家 78100698 西北出版社
  4 美国企业500家 78100698 西北出版社
B表中有数据如下:
主键码 子键码 条码号
  1 1 L044093
  1 2 L041392
  2 3 L041399
  3 4 0008303
  3 4 0008302
  4 5 0008300
  4 5 0008299
要求处理后的结果:
A表中有数据如下:
主键码 题名 书号 出版社
  1 傲慢与偏见 72042006 东北出版社
  3 美国企业500家 78100698 西北出版社
B表中有数据如下:
主键码 子键码 条码号
  1 1 L044093
  1 2 L041392
  1 3 L041399
  3 4 0008303
  3 4 0008302
  3 5 0008300
  3 5 0008299



------解决方案--------------------
SQL code
--A表中有数据如下:
--主键码 题名 书号 出版社
--  1 傲慢与偏见 72042006 东北出版社
--  2 例慢与偏见 72042006 东北出版社
--  3 美国企业500家 78100698 西北出版社
--  4 美国企业500家 78100698 西北出版社
if OBJECT_ID('A表')is not null
drop table A表
go 
create  table A表(主键码 int, 题名 varchar(20),书号 varchar(20), 出版社 varchar(20))
insert into A表 values(1, '傲慢与偏见' ,'72042006', '东北出版社')
insert into A表 values(2, '例慢与偏见' ,'72042006' ,'东北出版社')
insert into A表 values(3, '美国企业500家' ,'78100698', '西北出版社')
insert into A表 values(4, '美国企业500家', '78100698', '西北出版社')

--要求处理后的结果:
--A表中有数据如下:
--  主键码 题名        书号      出版社
--  1    傲慢与偏见    72042006 东北出版社
--  3    美国企业500家 78100698 西北出版社
;with ct as (select * from A表)
 select * from ct c where 主键码=(select min(主键码) from ct where c.书号=书号)
 
 
 
-- (1 行受影响)
--主键码         题名                   书号                   出版社
------------- -------------------- -------------------- --------------------
--1           傲慢与偏见                72042006             东北出版社
--3           美国企业500家             78100698             西北出版社

--(2 行受影响)


--B表中有数据如下:
--主键码 子键码 条码号
--  1 1 L044093
--  1 2 L041392
--  2 3 L041399
--  3 4 0008303
--  3 4 0008302
--  4 5 0008300
--  4 5 0008299

if OBJECT_ID('B表')is not null
drop table B表
go 
create  table B表(主键码  int,子键码 int, 条码号  varchar(20))
insert into B表 values(1, 1 ,'L044093')
insert into B表 values(1, 2 ,'L041392')
insert into B表 values(2, 3 ,'L041399')
insert into B表 values(3 ,4 ,'0008303')
insert into B表 values(3, 4 ,'0008302')
insert into B表 values(4, 5, '0008300')
insert into B表 values(4 ,5, '0008299')

--B表中有数据如下:
--主键码 子键码 条码号
--  1 1 L044093
--  1 2 L041392
--  1 3 L041399
--  3 4 0008303
--  3 4 0008302
--  3 5 0008300
--  3 5 0008299
 
 select (select min(主键码) from B表 where   substring(条码号,1,3)=substring(b.条码号,1,3) ),子键码,条码号 from B表  b
 


(1 行受影响)

(1 行受影响)

(1 行受影响)

(1 行受影响)
主键码         题名                   书号                   出版社
----------- -------------------- -------------------- --------------------
1           傲慢与偏见                72042006             东北出版社
3           美国企业500家             78100698             西北出版社

(2 行受影响)


(1 行受影响)

(1 行受影响)

(1 行受影响)

(1 行受影响)

(1 行受影响)

(1 行受影响)

(1 行受影响)
            子键码         条码号
----------- ----------- --------------------
1           1           L044093
1           2           L041392
1           3           L041399
3           4           0008303
3           4           0008302
3           5           0008300
3           5           0008299

(7 行受影响)