【问题标题】:SQl sorting based on certain property value of joined table基于连接表的某些属性值的 SQl 排序
【发布时间】:2015-09-08 04:49:41
【问题描述】:

我有以下表格和一些数据:

Collector:
dcid  name   hostid userid
123   test   host1  234
567   hello  host2  345

CollectorConfiguration:
ID   propertyname  propertyvalue  collector_id(foreign key)
id1  c_source      local          123
id2  c_createdby   admin          123
id3  c_pattern     JBoss          123
id4  c_source      remote         567
id4  c_createdby   admin          567
id4  c_pattern     Apache         567

现在我需要从 Collector 表中获取所有记录,并对 CollectorConfiguration 表中的列值“c_pattern”进行排序。

我尝试使用内部联接编写查询,但无法获得所需的结果。请帮忙。

注意:返回的结果只包含 Collector 表的列,即它应该表现得像 select * from Collector 但在 c_pattern 属性值上带有 sortinn。

Desired output(with ascending order on c_pattern):
567  hello host2 345
123  test  host1 234

【问题讨论】:

  • 你应该提供你想要的输出。也向我们展示你尝试了什么。
  • propety name "c_pattern" 上排序是什么意思??您对不在该列值中的列进行排序,除非您的意思是按该值过滤。
  • @JuanCarlosOropeza 我已经相应地编辑了问题。如果您需要任何其他信息,请告诉我。
  • 是的,您要求订购,但我没有看到任何订单。看起来您要求只选择一个collector_id,看不到您使用propertyname
  • 如果您看到 ColectorConfiguration 表,对于 colelctor(123),c_pattern 值为 JBoss,对于 colelctor(567),c_pattern 值为 Apache。所以排序应该做c_pattern值。

标签: sql hsqldb


【解决方案1】:

使用 EAV 模型,您应该有一堆帮助视图来克服这样的问题。视图将充当表,例如collector_patterns、collector_sources等。

SELECT c.*
FROM Collector c LEFT JOIN
CollectorConfiguration cc on c.dcid = cc.collector_id
where cc.propertyname = 'c_pattern'
ORDER BY cc.propertyvalue DESC

因此,要从此查询中创建视图,您可以这样编写:

CREATE VIEW collector_pattern AS
SELECT c.*, cc.propertyvalue AS pattern
FROM Collector c LEFT JOIN
CollectorConfiguration cc on c.dcid = cc.collector_id
where cc.propertyname = 'c_pattern'

【讨论】:

    【解决方案2】:
    SELECT a.* FROM Collector a
    LEFT JOIN CollectorConfiguration b ON b.collector_id=a.dcid
    WHERE b.propertyname="c_pattern"
    

    这个问题对我来说不是很清楚,但我猜你正在寻找。

    【讨论】:

    • 感谢您的回答。您的回答几乎奏效了,只是我需要在您的查询中添加 order by 子句。
    【解决方案3】:

    模式还不清楚,但应该是这样的

    SQL FIDDLE DEMO

    SELECT c.[dcid], c.[name], [hostid], [userid]
    FROM Collector c
    LEFT JOIN CollectorConfiguration cc 
        ON cc.collector_id=c.dcid
    WHERE cc.propertyname = 'c_pattern'
    

    【讨论】:

    • 您的回答几乎奏效了,只是我需要在查询中提及 order by,非常感谢您抽出宝贵时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 2016-10-16
    • 2021-08-17
    相关资源
    最近更新 更多