Podzapytanie skorelowane jest podzapytaniem, które odwołuje 					   się do tablicy, która występuje też w zapytaniu zewnętrznym.   Na przykład:(patrz listing.10)     Należy zauważyć, że zapytanie zawiera odwołanie do  					   kolumn tablicy tab1, 					   pomimo tego, że podzapytanie po słowie 					   FROM nie wspomina ani słowem 					   o tablicy tab1.  					   MySQL patrzy więc na zapytanie zewnętrzne i znajduje tam 					   tab1.   Przypuśćmy, że tablica tab1 zawiera wiersz 					   gdzie col1 = 5, 					   a col2 = 6, podczas gdy tablica 					   tab2 zawiera wiersz, w którym 					   col1 = 5 a col2 = 7. 					   Proste wyrażenie ... WHERE col1 = ANY (SELECT col1 FROM tab2) mogłoby zwrócić TRUE, jednak w tym przykładzie 					   wartość wyrażenia po słowie WHERE w podzapytaniu jest równe FALSE (gdyż (5,6) nie jest równe (5,7)), 					   tak więc w powyższym przykładzie cyrażenie jako całość jest równe 					   FALSE.   Ważna uwaga:  MySQL analizuje wyrażenie zaczynając od wewnątrz (podzapytanie) 					   i kończy analizę na zewnątrz (zapytanie zewnętrzne).   Na przykład (patrz listing 2.0):     W tym przykładzie wyrażenie x.col2 musi być kolumną w tablicy tab2 ponieważ SELECT col1 FROM tab2 AS x ... "zmienia nazwę" tablicy tab2.  					   Nie jest jednak kolumną w tablicy tab1 gdyż SELECT col1 FROM tab1 ... jest zapytaniem zewnętrznym, które "znajduje się znacznie dalej".   W przypadku zapytań ze słowami HAVING lub ORDER BY, MySQL szuka też  					   nazw kolumn w liście kolumn zapytania zewnętrznego.
Listing
SELECT * FROM tab1 WHERE col1 = ANY
(SELECT col1 FROM tab2 WHERE tab2.col2 = tab1.col2);
--Listing 2.0 - wynik równy TRUE
SELECT col1 FROM tab1 AS x WHERE x.col1 = (SELECT col1 FROM tab2 AS x WHERE x.col1 = (SELECT col1 FROM tab3 WHERE x.col2 = tab3.col1));
Ranga: Administrator serwisu Punktów: 0



 
  
				

 
                             
 


 
                        
 
		 
	