0

次のテーブルがあるとしましょう

id  value1  value2  value1_plus_value2
0   1.0     2.2     null
1   2.1     3.5     null
2   5.2     2.9     null
3   1.5     1.4     null

値をマッピングするためのテーブル

value   name
2.0     "almost three"
3.0     "about three"
3.5     "three and half"
5.5     "five point five"
6.0     "a lot more than five"

結果のテーブルは次のようになります

id  value1  value2  value1_plus_value2
0   1.0     2.2     "about three"
1   2.1     3.5     "five point five"
2   5.2     2.9     "a lot more than five"
3   1.5     1.4     "about three"

これはどのように行うべきですか?外部スクリプトを使用してループを使用して行ごとに実行するのはかなり簡単ですが、これを行う SQL 方法もかなりあります。

以下を使用して、1行でこれを行うことができます:

select id, value1, value2, name, abs(value1+value2-value) as distance
from value, mapping
where id=1
group by distance
limit 1;

sqlfiddle リンクを追加http://sqlfiddle.com/#!2/b1ac73/1

すべての行に対してこれを行いたいです。そして、見つかった最も近い名前を値テーブルに追加します。

したがって、取得したいテーブルのメタコードは次のようになります

select outerquery.value1, outerquery.value2, name as value1_plus_value2
from value as outerquery,
(
select id, value1, value2, name, abs(value1+value2-value) as distance
from value, mapping
where id = outerquery.id
group by distance
limit 1
) as subquery;

しかし、明らかに、外部クエリからサブクエリにデータを渡すことはできません。しかし、私はこれを間違って考えているだけだと確信しています。

4

1 に答える 1