【问题标题】:Query to determine if a multiple-table entity matches multiple-table criteria查询以确定多表实体是否匹配多表条件
【发布时间】:2014-11-05 00:12:45
【问题描述】:

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

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

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    我认为你可以像这样使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-05
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 2011-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多