查询以确定多表实体是否与多表条件匹配

时间:2014-11-05 00:12:46

标签: sql sql-server tsql

我使用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

比较这些表值的有效方法是什么?我很难为编码组件提出一个好的攻击计划。

1 个答案:

答案 0 :(得分: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