SQl基于连接表的某些属性值进行排序

时间:2015-09-08 04:49:42

标签: sql hsqldb

我有以下几个数据表:

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”进行排序。

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

注意:返回的结果只包含Colctor of Collector表,即它应该像收集器中的select *或c_pattern属性值上的sortinn一样。

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

3 个答案:

答案 0 :(得分:1)

SELECT a.* FROM Collector a
LEFT JOIN CollectorConfiguration b ON b.collector_id=a.dcid
WHERE b.propertyname="c_pattern"

相反,问题对我来说并不是那么清楚,但我想你是在寻找。

答案 1 :(得分: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 :(得分:1)

仍然不清楚模式,但应该看起来像这样

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'