У меня две таблицы:
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? Как? 🙂
Прочитайте ответ Тома, это было бы лучше всего сделать.
Во всяком случае, и стыдно за меня:
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
вы можете удалить MIN и MAX (и Group by), если Second не может иметь много строк с одинаковым first_id.
Нормализуйте свою базу данных . С вашей текущей настройкой это не невозможно, но определенно не рекомендуется.
-редактировать-
Если необходимо, вы можете использовать LEAST () и GREATEST ()
-edit2-
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
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
Вы можете сделать это с помощью UNION
. попробуйте это:
SELECT a.id, a.title, MIN(bc) `Min`, MAX(bc) `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
СМОТРИТЕ ЗДЕСЬ