学生表student
stuid name age
01 xp 20
02 pan 12
学生属性表
id stuid type
1 01 A
2 01 b
3 01 C
4 02 A
5 02 C
如何得到type是既是A、又是B、又是C的学生(即01号学生)。
依次类推,如何根据客户对type的输入,得到相应的查询记录。比如客户输入A、C就得到既是A又是C的学生(即01和02),客户输入A、B就得既是A、又是B的学生(即01)
解答:
--創建測試環境
Create Table 学生属性表
(id Int,
stuid Char(2),
type Varchar(10))
--插入數據
Insert 学生属性表 Select 1, '01', 'A'
Union All Select 2, '01', 'b'
Union All Select 3, '01', 'C'
Union All Select 4, '02', 'A'
Union All Select 5, '02', 'C'
GO
--測試
Declare @type Varchar(1000)
Select @type = 'A,B,C'
Select stuid From 学生属性表 Where CharIndex(type, @type) > 0 Group By stuid Having Count(stuid) = Len(@type) - Len(Replace(@type, ',', '')) + 1
Select @type = 'A,C'
Select stuid From 学生属性表 Where CharIndex(type, @type) > 0 Group By stuid Having Count(stuid) = Len(@type) - Len(Replace(@type, ',', '')) + 1
GO
--刪除測試環境
Drop Table 学生属性表
--結果
/*
stuid
01
stuid
01
02
*/