次のテーブルがあるとしましょう
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;
しかし、明らかに、外部クエリからサブクエリにデータを渡すことはできません。しかし、私はこれを間違って考えているだけだと確信しています。