Задать вопрос
gtAlexandr
@gtAlexandr

Возможно ли составить такой SQL запрос?

Добрый день!

Таблица tableA
f1 f2 f3 f4 f5
1 1 1 a 3
1 1 1 b 1
1 1 1 c 11
1 2 1 e 3
1 2 1 d 1
1 2 1 c 15


Запрос 1
SELECT *, MAX(`f5`) AS `f5` FROM `table` WHERE `f1` IN (1) AND `f2` IN (1, 2) AND `f3` IN (1) AND `f4` IN ('a', 'c') GROUP BY `f1`, `f2`, `f3`

Результат 1
f1 f2 f3 f4 f5
1 1 1 c 11
1 2 1 c 15


Запрос 2
SELECT *, MAX(`f5`) AS `f5` FROM `table` WHERE `f1` IN (1) AND `f2` IN (1, 2) AND `f3` IN (1) AND `f4` IN ('a', 'c') GROUP BY `f1`, `f2`, `f3`

Результат 2
f1 f2 f3 f4 f5
1 1 1 c 11


Запрос 3
?

Результат 3
f1 f2 f3 f4 f5
1 1 1 c 11
1 2 1 NULL NULL


Вопрос: как нужно переформулировать запрос 2, чтобы получился результат 3?
  • Вопрос задан
  • 2367 просмотров
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
@RedQuark
Пользователь kuzemchik правильно написал. Но на мой взгляд вопрос сформулирован очень странно. Зачем дан запрос 1, если в вопросе он не участвует? Что значит переформулировать запрос? Такое ощущение, что навязывается «единственно правильное решение». Если вопрос от преподавателя, то вот «переформулировка»:
select 1 As f1, 1 As f2, 	1 As f3,  	'c' As f4, 	'11' As f5
union
select 1 As f1, 2 As f2, 	1 As f3,  	null As f4, null As f5

и пусть не задает странных вопросов.
Ответ написан
Комментировать
kuzemchik
@kuzemchik
left join сам на себя с условием where. Первые три поля из первой таблицы, последние два из второй
Ответ написан
Комментировать
Gesper
@Gesper
А мне кажется или «Результат 2» нарушает условия «Запроса 2» в части «AND `f4` IN ('a', 'f')»?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы