[MySQL] Nieznana kolumna w WHERE CLAUSE

MichalProg
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 28 cze 2011, o 21:11
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 62 razy
Pomógł: 1 raz

[MySQL] Nieznana kolumna w WHERE CLAUSE

Post autor: MichalProg »

Dzień dobry.

Mam funkcję w której wykorzystuję zagnieżdżone SELECTy. Podobno, w MySQL aliasy są widoczne do jednego zagnieżdżenia. Niestety kod, który działał na MS SQL, z tegoż powodu w MySQL nie działa. Ja jednak nie znam się dobrze na SQLu, kod tej funkcji pisałem ponad miesiąc temu i już nie pamiętam jak ona działa, a zrozumienie tego z samego kodu jest dla mnie nie lada bolączką. Proszę o pomoc:

Kod: Zaznacz cały

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;
Błąd jest taki:

Kod: Zaznacz cały

#1054 - Nieznana kolumna 'sts.id' w  where clause
Błąd jest tylko podczas wywołania. Funkcję da się utworzyć.

Proszę o pomoc. Pisałem na innym forum, ale jak na razie nie otrzymałem odpowiedzi w postaci rozwiązania. Jestem koderem języków C-podobnych. Proszę o pomoc.

Dzięki
Michał

PS.
Tu jest zrzut bazy z phpMyAdmin:
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

[MySQL] Nieznana kolumna w WHERE CLAUSE

Post autor: leg14 »

od tej funkcji pisałem ponad miesiąc temu i już nie pamiętam jak ona działa, a zrozumienie tego z samego kodu jest dla mnie nie lada bolączką
Aha, a dla uzytkownikow forum to bedzie spacerek? Jestes "koderem" czy co?

Kod: Zaznacz cały

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
Mozesz zamienic na

Kod: Zaznacz cały

            select sum(duration) as xxx 
            from shows ss 
            join movies mvt on mvt.id = ss.title 
            where ss.setId = sts.id
            group by ss.setId
Tylko, ze musze Cie ostrzec wynik tego kodu (mojej i Twojej wersji) w ogolnosci jest tabela, a ty pozniej dzielisz jakas liczbe przez te tabele?!
MichalProg
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 28 cze 2011, o 21:11
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 62 razy
Pomógł: 1 raz

[MySQL] Nieznana kolumna w WHERE CLAUSE

Post autor: MichalProg »

Dzięki. Zaraz sprawdzę.

Nie dzielę tabeli, funkcja jest dobrze napisana, działa na MS SQL. MySQL nie obsługuje zagnieżdżeń aliasów
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

Re: [MySQL] Nieznana kolumna w WHERE CLAUSE

Post autor: leg14 »

Kod: Zaznacz cały

select sum(duration) as xxx 
            from shows ss 
            join movies mvt on mvt.id = ss.title 
            where ss.setId = sts.id
            group by ss.setId
Czyli twierdzisz, ze logika bazy danych sprawia, ze ta kwerenda nigdy nie zwroci tabeli?
MichalProg
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 28 cze 2011, o 21:11
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 62 razy
Pomógł: 1 raz

[MySQL] Nieznana kolumna w WHERE CLAUSE

Post autor: MichalProg »

Twierdzę, że funkcja działa dobrze na MS SQL. A to, czy po Twojej zmianie funkcja dalej będzie działać, tego jeszcze nie sprawdziłem.
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

Re: [MySQL] Nieznana kolumna w WHERE CLAUSE

Post autor: leg14 »

Moja zmiana semantycznie jest rownowazna Twojej kolejce - wiec odpowiedz na pytanie
MichalProg
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 28 cze 2011, o 21:11
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 62 razy
Pomógł: 1 raz

[MySQL] Nieznana kolumna w WHERE CLAUSE

Post autor: MichalProg »

Nie wiem. Jeszcze nie sprawdzałem.
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

Re: [MySQL] Nieznana kolumna w WHERE CLAUSE

Post autor: leg14 »

Ok nie chcesz sie niczego nauczyc to dalej sobie pisz ciach sqlki o 10x wiekszej objetosci niz potrzeba
Ostatnio zmieniony 26 gru 2018, o 21:21 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
MichalProg
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 28 cze 2011, o 21:11
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 62 razy
Pomógł: 1 raz

Re: [MySQL] Nieznana kolumna w WHERE CLAUSE

Post autor: MichalProg »

Kolego. Rozmawiasz z osobą o 10 lat starszą. Dziękuję Ci za pomoc, ale nie jesteś, delikatnie mówiąc irytujący. Jak chcesz tu propagować hate, to Twoja sprawa, ale proszę, nie obrażaj mnie i nie życzę sobie takiego stylu. Jak nie podoba Ci się to co piszę, to chociaż zachowaj resztki kultury i pozory dobrego wychowania.

Niestety, muszę Cię zmartwić. Twoja modyfikacja okazała się nieprawidłowa. Funkcja faktycznie, teraz zwraca w wewnętrznym seletcie tabelę. Mój ciach sqlek zwracał w wewnętrznym selectcie skalar. Ale cóż. Nie każdy umie pisać ciach sqlki

PS. Dla potomnych.

Udało mi się poprawić funkcję. Opakowałem dwa wewnętrzne selekty w funkcję i wywołuję ją z funkcji właściwej i działa. Dzięki.

Kod: Zaznacz cały

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;
Ostatnio zmieniony 26 gru 2018, o 21:22 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

[MySQL] Nieznana kolumna w WHERE CLAUSE

Post autor: leg14 »

Tak? to wstaw teraz ciach swoją wersje i zobaczysz, że też zwraca tabelę
Ostatnio zmieniony 27 gru 2018, o 04:05 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
MichalProg
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 28 cze 2011, o 21:11
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 62 razy
Pomógł: 1 raz

Re: [MySQL] Nieznana kolumna w WHERE CLAUSE

Post autor: MichalProg »

Czytając Pana wpisy w tym i innych tematach dochodzę do wniosku, że jest Pan bardzo nieszczęśliwą osobą. Moja chrześcijańska wiara, pomimo tego, że Pana wpisy wzbudzają we mnie agresję, nakazuje mi Panu współczuć. Coś w Pana życiu musiało się takiego zadziać, że przestał Pan odczuwać miłość, a zaczął okazywać nienawiść. Z całego serca, współczuje Panu i zaręczam o modlitwie. Pomodlę się o dobrą żonę dla Pana, a wcześniej o dziewczynę. A jeszcze wcześniej o umiejętność wchodzenia i budowania relacji z drugim człowiekiem i o zdobycie umiejętności empatii. Pewnie będąc w stanie, w jakim Pan jest teraz, nie zrozumie Pan tego, co tu napisałem, bądź się wycofa. Ale mimo to, pomodlę się, by umiał Pan się zakochać w dziewczynie i by ta relacja zmieniła Pana sposób komunikacji i postrzegania świata (siebie i innych).

Z pamięcią w modlitwie.
Michał.
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

Re: [MySQL] Nieznana kolumna w WHERE CLAUSE

Post autor: leg14 »

Też się za Ciebie pomodlę do mojego Boga. Mam nadzieję, że jego niechrześcijańskość Cię nie ubodzie
Jan Kraszewski
Administrator
Administrator
Posty: 34281
Rejestracja: 20 mar 2006, o 21:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 3 razy
Pomógł: 5203 razy

Re: [MySQL] Nieznana kolumna w WHERE CLAUSE

Post autor: Jan Kraszewski »

Jeszcze jeden post niezwiązany z tematem i zamknę wątek. Takie pogaduchy można uprawiać przez PW.

JK
ODPOWIEDZ