MYSQL根据比例ID从同一表返回值

时间:2013-07-12 04:36:18

标签: mysql

输入表:

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'的数据值

我还必须在多个表的“技能”,“能力”等方面做到这一点。所以我可以优化这个查询的任何方式都会非常有帮助!

我强烈怀疑自己犯了傻瓜错误。任何人都可以帮我解开这个吗?

1 个答案:

答案 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