Nieznana kolumna w ciele funkcji

0

Dzień dobry.

MySQL zgłasza, że w ciele mojej funkcji jest błąd. Tj.:
#1054 - Nieznana kolumna 'sts.id' w where clause

Ten kod działał na MS SQL, ale niestety nie działa na MySQL. Co tu jest źle? Proszę o pomoc.
Dzięki
Michał.

CREATE FUNCTION zwrocDlaMom(showId int)
RETURNS DECIMAL(12, 6)
BEGIN
	DECLARE wynik DECIMAL(12, 6);

	SET wynik =
	(SELECT www.res 
	FROM 
	(
		select sho.id as one, tit.title as two, sts.id as three, 1.0 / 100.0 * (100 - tit.cinema) * sts.amount * tit.duration / 
		(
			select xxx as test
			from 
			(
				select ss.setId, sum(duration) as xxx 
				from shows ss 
				join movies mvt on mvt.id = ss.title 
				where ss.setId = sts.id
				group by ss.setId
			) as test
		) as res
		from movies tit
		join shows sho on sho.title = tit.id
		join invoices invo on invo.id = sho.invoice and invo.company = tit.company
		join sets1 sts on sts.id = sho.setId
		where sho.id = showId
	) as www);

	return wynik;
end;

PS. Myślałem, że powodem błędu jest nazwa tabeli, która wcześniej była taka sama, jak słowo kluczowe sets, dlatego zmieniłem ją na sets1, ale i tak nie działa. Proszę o pomoc

Dzięki
Michał.

1

Aliasy działają tylko jeden poziom w dół (w MySQL). Temu nie zna sts. Ale ten jeden SELECT masz niepotrzebny.

0

Dzień dobry.

Już sobie poradziłem. Opakowałem wewnętrznego selecta w funkcję i wywołuje ją z funkcji właściwej.

CREATE FUNCTION zwrocDlaMom(showId int)
RETURNS DECIMAL(12, 6)
BEGIN
	DECLARE wynik DECIMAL(12, 6);

	SET wynik =
	(SELECT www.res 
	FROM 
	(
		select sho.id as one, tit.title as two, sts.id as three, 1.0 / 100.0 * (100 - tit.cinema) * sts.amount * tit.duration / 
		-- (
			-- select xxx as test
			-- from 
			-- (
				-- select ss.setId, sum(duration) as xxx 
				-- from shows ss 
				-- join movies mvt on mvt.id = ss.title 
				-- where ss.setId = sts.id
				-- group by ss.setId
			-- ) as test
		-- ) as res
		zwrocPom(sts.id) as res
		from movies tit
		join shows sho on sho.title = tit.id
		join invoices invo on invo.id = sho.invoice and invo.company = tit.company
		join sets1 sts on sts.id = sho.setId
		where sho.id = showId
	) as www);

	return wynik;
end;

Dzięki
Michał

1 użytkowników online, w tym zalogowanych: 0, gości: 1