【问题标题】:Combining object and property结合对象和属性
【发布时间】:2021-02-07 23:35:38
【问题描述】:

我有 3 张桌子。

第一个表名:对象

ID Name
1 Ahmet
2 Hasan

第二个表名:Properties

ID Name
1 EyeColor
2 Height

第三个表名:数据

ObjectID PropertyID Value
1 1 Blue
1 2 1.70
2 1 Green
2 2 1.90

使用上面三个表,我想用SQL创建如下列表。

Name EyeColor Height
Ahmet Blue 1.70
Hasan Green 1.90

我尝试将此传输作为示例 SQL

SELECT Distinct Objects.Name, (SELECT * FROM Datas where PropertyID = Datas.PropertyID )
FROM Datas
INNER JOIN Objects ON Datas.ObjectID = Objects.ID
INNER JOIN Properties ON Datas.PropertyID = Properties.ID

有人可以帮帮我吗?

【问题讨论】:

  • 我删除了不一致的数据库标签。请仅使用您真正使用的数据库进行标记。
  • 我是新来的,不足之处见谅。
  • 我推荐阅读how to ask
  • 谢谢@DaleK,我会努力的

标签: sql sql-server database tsql


【解决方案1】:

从最终结果中包含您想要的行的表开始,即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');

【讨论】:

    【解决方案2】:

    我现在会帮你弄清楚如何解决这个问题,但你需要看一个 SQL 教程,

    因此,首先您需要在 O/P 中为该人同时选择 EyeColorHeight,那么您如何才能确定该值适用于您需要检查的特定人员。

    这将是一个这样的查询:

    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 解决方案,因为它可以为您提供很多帮助。

    【讨论】:

    • @DaleK 你完全正确,我只是想给他看一个简单的例子,非常感谢编辑。
    • @DaleK 你是对的,我会在接下来的答案和 cmets 中注意,再次感谢您的努力和建议。我真的很感激。
    • 非常感谢您宝贵的cmets。 @MohamedBdr
    • @MertAktürk 谢谢
    • @DaleK 再次完成 :) 非常感谢您的耐心和支持。
    猜你喜欢
    • 2020-12-05
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多