我会尝试尽可能简单地解释它:
首先是一些带有虚拟数据的数据库结构。
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
但是怎么样?
从tb_spec_feature获取,其中“filter”等于2表示tb_spec_value表中存在的最高值和最低值,并通过tb_spec_fk表连接在一起。
很多!但我会饶恕你:)。
答案 0 :(得分: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
两个JOIN
语句将一个要素“链接”到一个值。 GROUP BY
对具有相同功能ID的所有行进行分组,然后您可以在这些列上使用min或max或任何其他聚合函数。
答案 1 :(得分: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