【发布时间】:2014-08-26 15:55:36
【问题描述】:
我正在努力将以下 3 个表放入一个查询中:
人
ID FirstName
1 'Jack'
2 'Liz'
t属性
ID AttributeName
101 'LastName'
102 'Gender'
tData
PersonID AttributeID AttributeValue
1 101 'Nicholson'
1 102 'Male'
2 101 'Taylor'
2 102 'Female'
重要提示:tAttribute 中的属性是动态的。可能还有更多,例如:
ID AttributeName
103 'Income'
104 'MostPopularMovie'
问题:如何编写我的查询(或必要时的查询),以便获得以下输出:
PersonID FirstName LastName Gender [otherFields]
1 'Jack' 'Nicholson' 'Male' [otherValues]
2 'Liz' 'Taylor' 'Female' [otherValues]
我经常阅读“到目前为止您尝试过什么?”,但是使用子查询和联接发布我所有失败的尝试并没有多大意义。我只是对 SQL 不太安全。
非常感谢。
【问题讨论】:
-
@Tab Alleman 这看起来很有希望,谢谢!会试一试:)
-
理性数据库中的 EAV 本身就是一个设计缺陷。只有在非常罕见的情况下无法提前确定字段时才会显示。在这种罕见的情况下,实际数据库是错误的工具。如果您真的需要 EAV 表,请使用 nosql 数据库。否则,进行适当的关系设计,它会更快更容易查询。
-
感谢@HLGEM。对于谷歌同事:stackoverflow.com/questions/870808/…(不幸的是,在我的情况下,它是第 3 方工具的一部分)
标签: sql-server join pivot entity-attribute-value