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 によって参照され、次に group_id 内に element_id によって参照される 15k 行を含むテーブルがあります。1 つの特定の element_id に対して特定の group_id のすべての要素を取得し、それらを並べ替えてから、最後のクエリで返された順序に基づいて別の element_id の要素を取得する 2 つの部分のクエリを実行したいと考えています。

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' (重要度) でソートされ、次に重要度の順序に基づいて、上記の onetsoc_code のすべての要素の data_values が scale_id 'LV' で指定されます. 最初のクエリの data_values は必要ありません。scale_id 'LV' に基づく 2 番目のクエリだけです。

また、複数のテーブル「スキル」、「能力」などでこれを行う必要があるため、このクエリを最適化できる方法は非常に役立ちます!

私は骨頭の間違いを犯していると強く疑っています。誰でもこれを解くのを手伝ってくれますか?

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 に答える