我有以下几个数据表:
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
答案 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)
仍然不清楚模式,但应该看起来像这样
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'