34,593
社区成员
发帖
与我相关
我的任务
分享
--这是使用存储过程的方法.
create table A(商品ID varchar(10), 商品名 varchar(10))
insert into A values('1001', '商品1001')
insert into A values('1002', '商品1002')
create table B(商品ID varchar(10) , 商品列表ID int, 商品属性 varchar(20))
insert into B values('1001', 1, '属性1001_1')
insert into B values('1001', 2, '属性1001_2')
insert into B values('1001', 3, '属性1001_3')
insert into B values('1001', 4, '属性1001_4')
insert into B values('1002', 1, '属性1002_1')
insert into B values('1002', 2, '属性1002_2')
insert into B values('1003', 1, '属性1003_1')
go
create procedure my_proc @商品属性 as varchar(20)
as
begin
if @商品属性 = '' or @商品属性 is null
select m.* from
(
select A.* , B.商品列表ID,B.商品属性 from A,B where A.商品ID = B.商品ID
) m where 商品列表ID = (select min(商品列表ID) from
(
select A.* , B.商品列表ID,B.商品属性 from A,B where A.商品ID = B.商品ID
) n where n.商品ID = m.商品ID
)
else
select m.* from
(
select A.* , B.商品列表ID,B.商品属性 from A,B where A.商品ID = B.商品ID and B.商品属性 like '%'+ @商品属性 + '%'
) m where 商品列表ID = (select min(商品列表ID) from
(
select A.* , B.商品列表ID,B.商品属性 from A,B where A.商品ID = B.商品ID and B.商品属性 like '%'+ @商品属性 + '%'
) n where n.商品ID = m.商品ID
)
end
go
exec my_proc ''
/*
商品ID 商品名 商品列表ID 商品属性
---------- ---------- ----------- --------------------
1001 商品1001 1 属性1001_1
1002 商品1002 1 属性1002_1
(所影响的行数为 2 行)
*/
exec my_proc '1002_2'
/*
商品ID 商品名 商品列表ID 商品属性
---------- ---------- ----------- --------------------
1002 商品1002 2 属性1002_2
(所影响的行数为 1 行)
*/
exec my_proc '1002'
/*
商品ID 商品名 商品列表ID 商品属性
---------- ---------- ----------- --------------------
1002 商品1002 1 属性1002_1
(所影响的行数为 1 行)
*/
drop table A,B
drop procedure my_proc
--确保你B表的商品属性为"属性"开头.
create table A(商品ID varchar(10), 商品名 varchar(10))
insert into A values('1001', '商品1001')
insert into A values('1002', '商品1002')
create table B(商品ID varchar(10) , 商品列表ID int, 商品属性 varchar(20))
insert into B values('1001', 1, '属性1001_1')
insert into B values('1001', 2, '属性1001_2')
insert into B values('1001', 3, '属性1001_3')
insert into B values('1001', 4, '属性1001_4')
insert into B values('1002', 1, '属性1002_1')
insert into B values('1002', 2, '属性1002_2')
insert into B values('1003', 1, '属性1003_1')
go
declare @商品属性 as varchar(20)
set @商品属性 = ''
select m.* from
(
select A.* , B.商品列表ID,B.商品属性 from A,B where A.商品ID = B.商品ID and B.商品属性 like '%属性'+ @商品属性 + '%'
) m where 商品列表ID = (select min(商品列表ID) from
(
select A.* , B.商品列表ID,B.商品属性 from A,B where A.商品ID = B.商品ID and B.商品属性 like '%属性'+ @商品属性 + '%'
) n where n.商品ID = m.商品ID
)
/*
商品ID 商品名 商品列表ID 商品属性
---------- ---------- ----------- --------------------
1001 商品1001 1 属性1001_1
1002 商品1002 1 属性1002_1
(所影响的行数为 2 行)
*/
set @商品属性 = '1002_2'
select m.* from
(
select A.* , B.商品列表ID,B.商品属性 from A,B where A.商品ID = B.商品ID and B.商品属性 like '%属性'+ @商品属性 + '%'
) m where 商品列表ID = (select min(商品列表ID) from
(
select A.* , B.商品列表ID,B.商品属性 from A,B where A.商品ID = B.商品ID and B.商品属性 like '%属性'+ @商品属性 + '%'
) n where n.商品ID = m.商品ID
)
/*
商品ID 商品名 商品列表ID 商品属性
---------- ---------- ----------- --------------------
1002 商品1002 2 属性1002_2
(所影响的行数为 1 行)
*/
set @商品属性 = '1002'
select m.* from
(
select A.* , B.商品列表ID,B.商品属性 from A,B where A.商品ID = B.商品ID and B.商品属性 like '%属性'+ @商品属性 + '%'
) m where 商品列表ID = (select min(商品列表ID) from
(
select A.* , B.商品列表ID,B.商品属性 from A,B where A.商品ID = B.商品ID and B.商品属性 like '%属性'+ @商品属性 + '%'
) n where n.商品ID = m.商品ID
)
/*
商品ID 商品名 商品列表ID 商品属性
---------- ---------- ----------- --------------------
1002 商品1002 1 属性1002_1
(所影响的行数为 1 行)
*/
drop table A,B