【发布时间】:2010-03-02 23:17:05
【问题描述】:
假设我有两个表 - Person 和 Clothes,并且这两个表都有关联的 Key/Value 表,这些表存储有关 Person 和 Clothing 项目的属性。
Person to Attributes 的联合版本可能如下所示:
PersonID | AttributeKey | AttributeValue
1 'Age' '20'
1 'Size' 'Large'
2 'Age' '20'
服装到属性的联合版本可能如下所示:
ClothingID | AttributeKey | AttributeValue
99 'Age' '20'
99 'Color' 'Blue'
60 'Age' '20'
给定一件特定的衣服,我想找到与所有属性对完全匹配的 Person 条目。例如,给定 ClothingID 60 我只想获取 PersonID 2,即使 PersonID 1 确实有匹配的 AGE 但它有额外的属性。而且基本上相反的效果是一样的。
鉴于 Clothing 99,我预计没有结果,因为没有 Person 条目具有 Color 属性。
一个 INNER JOIN 显然给了我与人的特定属性相匹配的服装属性。但我只想返回所有可能匹配确实匹配的行,如果有额外的,则丢弃其他行。 OUTER JOIN 将为匹配的值提供 NULL 值,但如果 1 行有 NULLS,我如何检测并丢弃所有 Person 行?
【问题讨论】:
-
如果您重组表以便将属性存储在它们自己的字段中,那么查询数据会变得容易得多。例如。人员(PersonID、年龄、尺寸、姓名等)和衣服(ClothingID、年龄、颜色、类型、描述等)
标签: sql-server database tsql join