2016-04-22 36 views
-5

DB表SQL QRY trickl拼圖

ColA ColB ColC ColD  

Null Null Null Null 
120  Null Null Null 
120  1  Null Null 
120  1  5  Null 
120  1  5  1 

Declare @ColA as Int = 120 - 這不能爲NULL,但也可以是一些1500 不存在於數據庫

Declare @ColB as Int = 1 - 這可以爲NULL或者也可以是1500的東西不存在於數據庫

Declare @ColC as Int = 5 - 這可以爲空,也可以是1500的東西不存在於數據庫

Declare @ColD as Int = 1 - 這可以爲空,也可以是1500的東西不存在於數據庫

--Rough草案,但不超過一列

SELECT * FROM @TblA 
WHERE 
    @ColA=ColA AND 
    ISNULL(ColB, @ColB)= @ColB AND 
    EXISTS(SELECT 1 FROM @TblA WHERE @ColA=ColA) 
UNION 
SELECT * FROM @TblA 
WHERE 
    ColA IS NULL AND 
    ISNULL(ColB, @ColB)= @ColB AND 
    NOT EXISTS (SELECT 1 FROM @TblA WHERE @ColA=ColA) 

SQL輸出工作 - 當@ColA = 120

ColA ColB ColC ColD  

120  Null Null Null 
120  1  Null Null 
120  Null 5  3 
120  1  5  Null 
120  1  Null 4 
120  1  5  1 
120  1  5  Null 

SQL輸出 - 當@ColA = 1259 @ColA有比賽在此分貝所以得到空可樂

ColA ColB ColC ColD  

Null Null Null Null 

SQL輸出 - 當@ColA = 120 & @ColB = 1 @ColB具有分貝匹配以便得到匹配的記錄可樂& COLB

ColA ColB ColC ColD  

120  1  Null Null 
120  1  5  Null 
120  1  Null 4 
120  1  5  1 
120  1  5  Null 

SQL輸出 - 當@ColA = 120 & @ColB = 178 @ColB在數據庫不匹配,從而獲得匹配可樂記錄和爲空值,因爲COLB沒有COLB = 178

ColA ColB ColC ColD  

120  Null Null Null 
120  1  Null Null 
120  Null 5  3 
120  1  5  Null 
120  1  Null 4 
120  1  5  1 
120  1  5  Null 

SQL輸出 - 當@ColA = 120 & @ColB = 1 & COLC = 5獲得ColA的匹配記錄COLB & COLC

ColA ColB ColC ColD  

120  1  5  Null 
120  1  5  1 
120  1  5  Null 

SQL輸出 - 當@ColA = 120 & @ColB = 1 & COLC = 500 @ColC在DB敵不過這樣得到可樂COLB但因爲不是COLC匹配的記錄是沒有 COLC = 500

ColA ColB ColC ColD  

120  1  Null Null 
120  1  5  Null 
120  1  Null 4 
120  1  5  1 
120  1  5  Null 

SQL輸出 - 當@ColA = 120 & @ColB = 1 & COLC = 5 &冷= 1個GET匹配記錄可樂& COLB & COLC &冷

ColA ColB ColC ColD  

120  1  5  1 

SQL輸出 - 當@ColA = 120 & @ColB = 1 & COLC = 5 & @ColD = 500然後@ColD具有分貝沒有匹配,從而得到可樂COLB匹配的記錄& COLC但不能用於冷,因爲沒有冷= 500

ColA ColB ColC ColD  

120  1  5  Null 
120  1  5  1 
120  1  5  Null 

可能??

+0

不限運氣????????? – Ken

回答

0

SELECT *

FROM @tblA

WHERE

@ColA =可樂

(@ColB = COLB)AND

(@ColC = COLC)

聯盟

直接--handles或錯誤輸入值

SELECT *

FROM @tblA CPT

WHERE

@ColA =可樂

(EXISTS(SELECT 1 FROM @tblA WHERE @ ColB = ColB)和@ColB不爲NULL和@ColB = ColB)

Union

直接--handles或錯誤輸入值

SELECT *

FROM @tblA CPT

WHERE

@ColA =可樂

(EXISTS(SELECT 1 FROM @tblA WHERE @ ColC = ColC)和@ColC不是NULL和@ColC = ColC)

聯盟

直接--handles或錯誤的輸入值

SELECT *

FROM @tblA CPT

WHERE

@ColA =可樂

(@ColB not in (SELECT ColB FROM @tblA) and @ColB is Not NULL and 

ISNULL (ColB,@ColB)= @ColB)

聯盟

NULL --handles輸入值

SELECT *

FROM @tblA CPT

WHERE

@ColA =可樂

@ColB is NULL and ISNULL(ColB, @ColB)= @ColB