0

できるだけ簡単に説明します。

まず、ダミーデータを含むデータベース構造。

構造

tb_spec_fk

feature     value
-----------------
1           1
1           2
1           3
1           4
1           5
2           2
2           3
3           1
3           4
4           2
4           3
4           4
5           1
5           3
5           5
6           3
6           5

tb_spec_feature

feature_id  filter
------------------
1           2
2           2
3           2
4           2
5           1
6           0

tb_spec_value

value_id    name
----------------
1           10
2           20
3           30
4           40
5           50

今、私が欲しいのは次の結果です

結果

feature_id  min_value   max_value
---------------------------------
1           10          50
2           20          30
3           10          40
4           20          40

しかし、どのように?

論理

"filter" が 2 に等しい tb_spec_feature から、tb_spec_value テーブルに存在し、tb_spec_fk テーブルを通じて一緒に接続された最高値と最低値を取得します。

私の試み

多くの!しかし、私はあなたを惜しみません:)

4

2 に答える 2

2
SELECT
    f.feature_id AS feature_id,
    MAX(value.name) AS max_value,
    MIN(value.name) AS min_value
FROM tb_spec_feature AS f
    JOIN tb_spec_fk AS fk ON f.feature_id=fk.feature
    JOIN tb_spec_value AS value ON fk.value=value.id
WHERE f.filter=2
GROUP BY f.feature_id

2 つのJOINステートメントは、機能を値に「リンク」します。GROUP BY同じ機能 ID を持つすべての行をグループ化すると、それらの列で最小値または最大値、またはその他の集計関数を取得できます。

デモ

于 2013-02-05T19:18:56.337 に答える
0

これがあなたがそれをする方法です

select 
    tsf.feature_id,
    tsvl.name as Min_Value,
    tsvr.name as Max_Value
from tb_spec_feature as tsf
inner join (select feature , MIN(value) MinV,MAX(value)MaxV from tb_spec_fk group by feature order by feature)as tsfkl on tsfkl.feature = tsf.feature_id
left join tb_spec_value as tsvl on tsvl.value_id = tsfkl.MinV
left join tb_spec_value as tsvr on tsvr.value_id = tsfkl.MaxV
where tsf.filter = 2
group by tsf.feature_id

出力

feature_id  | Min_Value | Max_Value
---------------------------------
1           |   10      |   50
2           |   20      |   30
3           |   10      |   40
4           |   20      |   40

フィドルデモ

于 2013-02-05T19:56:10.983 に答える