0

私は2つのテーブルを持っています:

First:
id | title 
1  | aaa
2  | bbb
3  | ccc

Second:
id | first_id | one | two | three | four
1  |    1     | 3   | 1   | 4     | 6
2  |    2     | 4   | 4   | 1     | 2
3  |    3     | 1   | 2   | 3     | 4

そして私は見せたい:

id | title | min | max 
1  | aaa   |  1  | 6
2  | bbb   |  1  | 4
3  | ccc   |  1  | 4

これはSQLで可能ですか?どのように?:)

4

4 に答える 4

2

データベースを正規化します。現在の設定では不可能ではありませんが、絶対にお勧めしません。

-編集-必要に応じて、 LEAST()およびGREATEST(
) を使用できます

-編集2-

SELECT 
    a.id,
    a.title,
    LEAST(b.one,b.two,b.three,b.four) min,
    GREATEST(b.one,b.two,b.three,b.four) max
FROM first a
INNER JOIN second b ON a.id=b.first_id
于 2012-07-09T09:21:33.513 に答える
1

を使用してそれを行うことができますUNION。これを試してみてください:

SELECT a.id, a.title, MIN(b.c) `Min`, MAX(b.c) `Max`
FROM First a INNER JOIN 
(
    SELECT first_id, `one` c FROM `Second`
       UNION
    SELECT first_id, `two` c FROM `Second`
       UNION
    SELECT first_id, `three` c FROM `Second`
       UNION
    SELECT first_id, `four` c FROM `Second`
) b on a.id = b.First_ID
GROUP BY a.id

ここでデモを見る

于 2012-07-09T09:27:07.347 に答える
1

トムの答えを読んでください。これが最善の方法です。

とにかく、そして私に恥をかかせます:

SELECT f.id, f.title
 MIN(LEAST(s.one, s.two, s.three, s.four)) as min,
 MAX(GREATEST(s.one, s.two, s.three, s.four)) as max
 FROM First f
 INNER JOIN Second s on f.id = s.first_id
 GROUP BY f.id, f.title

Second が同じ first_id を持つ行を多く持つことができない場合は、MIN と MAX (および Group by) を削除できます。

于 2012-07-09T09:25:27.550 に答える
1
select first_id,F.title ,MIN(num) [min],MAX(num) [max] from (
select first_id,[one] [num]from [Second]  union all
select first_id,[two] [num]from [Second]  union all
select first_id,[three] [num]from [Second]  union all
select first_id,[four] [num] from [Second] )[Second]
join [First] F
on Id=first_id
group by first_id,F.title
于 2012-07-09T09:35:20.987 に答える