我有3张表
第一个表名:Objects
<表类>
ID
名称
tbody><<tr>1 艾哈迈德 2哈桑 表类>
从具有您想要的最终结果的行表开始,即Objects
(尽管我强烈建议不要将其用作用户表名,因为它也是系统表名)。
然后加入你需要的其他栏目的信息。
我强烈建议使用表别名,使您的查询更容易阅读和理解。
select [Name], E.[Value] EyeColor, H.[Value] Height
from dbo.[Objects] O
inner join dbo.[Data] H on H.ObjectID = O.id
and H.PropertyID = (select P.id from dbo.Properties P where P.[Name] = 'Height')
inner join dbo.[Data] E on E.ObjectID = O.id
and E.PropertyID = (select P.id from dbo.Properties P where P.[Name] = 'EyeColor');
我将帮助你找出如何解决这个问题,但你需要看到一个SQL教程,
首先,你需要在O/p中为这个人同时选择EyeColor
和Height
,那么你怎么知道这个值是针对你需要检查的特定的人的呢?
它将是一个像这样的查询:
SELECT Objects.Name AS NAME, EyeColor.Value AS EyeColor, Height.Value AS Height
FROM Objects AS Obj
INNER JOIN Data AS EyeColor ON EyeColor.ObjectID = Obj.ID
AND EyeColor.PropertyID = 1
INNER JOIN Data AS Height ON Height.ObjectID = Obj.ID
AND Height.PropertyID = 2;
你需要测试并修改它。
请注意:有很多其他的解决方案,所以总是尝试弄清楚你想要什么,然后开始划分问题,然后尝试开始写你的查询。
查看@Dale K的解决方案,因为它可以帮助你很多。