0

输入表:

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'

我已经尝试了一切,子查询有效(我已经尝试过不带引号,没有强制转换为字符等,它返回了我需要以正确顺序查询的所有 element_id。当我去执行上述查询时,对于一些原因,尽管数据库中有与子查询中的 element_id 对应的条目,但它什么也不返回。

我想要的结果是 onetsoc_code = '11-1011.00' 的所有元素的 data_value 首先按 scale_id 'IM' (重要性)排序,然后根据重要性顺序,上述 onetsoc_code 的所有元素的 data_values 给定 scale_id 'LV' . 我不需要第一个查询中的 data_values,只需要基于 scale_id 'LV' 的第二个查询

我还必须跨多个表“技能”、“能力”等执行此操作,所以我可以优化此查询的任何方式都会非常有帮助!

我强烈怀疑我犯了一个愚蠢的错误。谁能帮我解开这个问题?

4

1 回答 1

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
于 2013-07-12T05:38:56.680 回答