输入表:
onetsoc_code | element_id | scale_id | data_value
11-1011.00 | 2.A.1.a | IM | 4.38
11-1011.00 2.A.1.a LV 4.75
11-1011.00 2.A.1.b IM 4.38
11-1011.00 2.A.1.b LV 4.88
11-1011.00 2.A.1.c IM 4.12
11-1011.00 2.A.1.c LV 4.50
所需的输出表:
onetsoc_code | element_id | data_value
11-1011.00 | 2.A.1.b | 4.88
11-1011.00 | 2.A.1.a | 4.75
11-1011.00 | 2.A.1.c | 4.50
说明:
我有一个表,其中包含由group_id引用的15k行,然后在group_id中包含element_id。我想做一个两部分查询,它获取1个特定element_id的某个group_id的所有元素,对它们进行排序,然后根据它们在上一个查询中返回的顺序获取另一个element_id的元素。
SELECT element_id, data_value
FROM skills
WHERE element_id
IN(SELECT CAST(group_concat(CONCAT('''', element_id, '''') ORDER BY data_value DESC) as char) FROM `skills` WHERE onetsoc_code = '11-1011.00' AND scale_id = 'IM')
AND onetsoc_code = '11-1011.00'
AND scale_id = 'LV'
我已经尝试了一切,子查询工作(我已经尝试过没有引号,没有被强制转换为char等等,它返回所有我需要以正确顺序查询的element_id。当我去做上面的查询时,出于某种原因,尽管数据库中的条目与子查询中的element_id相对应,但它没有返回任何内容。
我想要的结果是onetsoc_code = '11 -1011.00'的所有元素的data_value首先由scale_id'IM'(重要性)排序,然后基于重要性顺序,给定scale_id的上述onetsoc_code的所有元素的data_values 'LV'。我不需要第一个查询中的data_values,只需要第二个基于scale_id'LV'的数据值
我还必须在多个表的“技能”,“能力”等方面做到这一点。所以我可以优化这个查询的任何方式都会非常有帮助!
我强烈怀疑自己犯了傻瓜错误。任何人都可以帮我解开这个吗?
答案 0 :(得分:1)
我认为联接会做你想做的事情
SELECT a.element_id, a.data_value
FROM skills as a, skills as b
WHERE a.element_id=b.element_id
and b.onetasoc_code='11-1011.00' and b.scale_id='IM'
AND a.onetsoc_code = '11-1011.00'
AND a.scale_id = 'LV'
order by b.data_value desc