2014-11-05 40 views
0

我使用的T-SQL數據庫中的屬性分佈在多個表中。根據該賬戶的屬性是否與代碼所需的屬性相匹配,可以爲每個賬戶分配一個代碼。我正在嘗試開發一個查詢,該查詢可以獲取給定的帳戶和給定的代碼,確定它們是否兼容,並在匹配和不匹配的位置返回值。讓我舉個例子。查詢以確定多表實體是否匹配多表標準

假設我們有以下幾點:

Table Person 
(
    UniqueID 
    , FirstName 
    , LastName 
    , FK_EyeColor 
    , FK_HairColor 
    , FK_Age 
) 

Table EyeColor 
(
    PK_EyeColor 
    , EyeColor 
) 

Table HairColor 
(
    PK_HairColor 
    , HairColor 
) 

Table Age 
(
    PK_Age 
    , Age 
) 

而一個人具有以下屬性:

UniqueID = 1 
FirstName = 'John' 
LastName = 'Doe' 
FK_EyeColor = 3 -- Brown eyes 
FK_HairColor = 4 -- Black hair 
PK_Age = 19 -- 19 y/o 

現在,讓我們說我有被分配到人們的棕色眼睛和類別代碼棕色頭髮:

Table Categories 
(
    PK_Categories 
    , CategoryName 
    , FK_EyeColor 
    , FK_HairColor 
) 

我想要做的是指定一個人和一個類別,並確定如果該人適合該類別理想情況下,它會返回類似於:

Person.UniqueID | FK_EyeColor | FK_HairColor | Qualifies for "Brown" category 
       1 |   3 |   4 | No 
       2 |   3 |   3 | Yes 

什麼是比較這些表值的有效方法?我很難爲編碼組件提出一個很好的攻擊計劃。

回答

0

我認爲你可以用SQL這樣做:

select 
    p.UniqueID, 
    p.FK_EyeColor, 
    p.FK_HairColor, 
    case 
    when c.CategoryName = 'brown' 
    then 'Yes' 
    else 'No' 
    end as Brown_category 
from person as p 
left outer join categories as c 
on p.FK_HairColor = c.FK_HairColor 
and p.FK_EyeColor = c.FK_EyeColor 
where c.CategoryName is not null 

這是我寫的一個工作提琴在這裏:http://sqlfiddle.com/#!3/3531d/1