Против того, что сказал Марк, вы можете иметь переменное количество столбцов. Хотя я демонстрирую здесь, насколько глупо это на самом деле.
Обычно вы бы один оператор, как
SELECT * FROM apples a JOIN flavors f ON a.flavor = f.flavor;
, то вы бы сделать немного вуду на уровне приложений, и это он. Вот как этот простой запрос будет выглядеть так, чтобы получить статический число столбцов:
select
Apple,
max(case when my_quality_numbering = 1 then Quality else null end) as Quality1,
max(case when my_quality_numbering = 2 then Quality else null end) as Quality2
from (
select
a.Apple,
f.Quality,
case when (if(@prev_apple != a.Apple, @quality_no := 1, @quality_no := @quality_no + 1)) is null then null
when (@prev_apple := a.Apple) is null then null
else @quality_no end as my_quality_numbering
from
apples a
join flavors f on a.Flavor = f.Flavor
, (select @quality_no := 0, @prev_apple := NULL) v
order by a.Apple
) sq
group by Apple
И это только половина работы. Чтобы иметь переменное количество столбцов, вам нужно написать хранимую процедуру, которая читает из внутреннего запроса, сколько столбцов необходимо. Затем вам нужно будет построить строку запроса для внешнего запроса и выполнить все это с помощью подготовленного оператора. Довольно много работы для простого запроса. Опять же, я делал выше запрос только для удовольствия, но в целом это действительно не стоит проблем.
Мы не собираемся писать код для вас, по крайней мере, показать некоторые усилия. Попробуйте что-нибудь. –
Довольно точно, что это невозможно с SQL. Ни в коем случае не в здравом уме. Просто запустите один запрос, чтобы получить яблоки, а второй - для получения его качеств. – mpen
@ GertB. В общем, я согласен с вашими настроениями, но я не думаю, что он мог бы написать здесь. – mpen