微軟的數據庫面試題。

發信人: leezile (樂·ISEE.DK0201 FOREVER), 板面: Database
標  題: 問一道面試題。數據庫方面
發信站: 飄渺水雲間 (Sun May 27 23:42:44 2007), 轉信

數據庫中表的內容爲:(KeyName, KeyValue是主鍵)

ID      KeyName KeyValue
1       A       1
1       A       2
1       B       2
1       C       3
2       A       1
2       B       2
2       C       3
4       A       1
4       B       2
5       A       1
6       B       2

要求輸入<KeyName, KeyValue>[],是KeyName和Value匹配對的數組,
得到查詢結果爲具有這些數組對的ID。
如:

輸入(KeyName, KeyValue)
A       1
B       2
結果(ID)
1
2
4

寫SQL語句。


PS:我可以把輸入存成臨時表,然後要怎麼用呢?

 

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[ShowId]
(
@inputString varchar(max)
)
AS

DECLARE  @PointerPrev int
DECLARE @PointerCurr  int
DECLARE @spaceIndex int
DECLARE @subString varchar(50)
DECLARE @keyWord varchar(50)
DECLARE @value int

Set @PointerPrev=0 
set  @PointerCurr=0
--SET @inputString = 'A,1;B,2'

CREATE TABLE #temp
(
    name 
varchar(50),
    value 
int
)

begin transaction 
    
SET NOCOUNT ON;
    
truncate table #temp--清空臨時表的所有數據和約束
while(LEN(@inputString)>@PointerCurr)
begin
    
Set @PointerCurr=CharIndex (';',@inputString ,@PointerPrev+1)
    
if(@PointerCurr<=0)
        
break
    
else
    
begin
        
set @subString=SUBSTRING(@inputString,@PointerPrev+1 ,@PointerCurr-@PointerPrev-1)
        
set @spaceIndex=CharIndex (',',@subString ,1)
        
set @keyWord=SUBSTRING(@subString,1,@spaceIndex-1)
        
set @value=CASTSUBSTRING(@subString,@spaceIndex+1,LEN(@subString)-@spaceIndexas int)
        
INSERT INTO #temp VALUES(@keyWord,@value)
        
set @PointerPrev=@PointerCurr;
    
end
end
    
set @subString=SUBSTRING(@inputString,@PointerPrev+1 ,LEN(@inputString)-@PointerPrev)
    
set @spaceIndex=CharIndex (',',@subString ,1)
    
set @keyWord=SUBSTRING(@subString,1,@spaceIndex-1)
    
set @value=CASTSUBSTRING(@subString,@spaceIndex+1,LEN(@subString)-@spaceIndexas int)
    
INSERT INTO #temp VALUES(@keyWord,@value)

Set NoCount OFF
if @@error= 0
begin
    
commit transaction
end
else 
begin
    
rollback transaction
end
----------------------------這裏開始進入正題
select distinct id from dbo.Key_Value kv
where not exists 
(
select name,value from #temp
except
select Keyword,value from dbo.Key_Value where id=kv.id
);
說明:
 

select name,value from #temp

except

select Keyword,value from dbo.Key_Value where id=5

結果爲:

name                                               value      
-------------------------------------------------- -----------
B                                                  2          

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章