Loading:


Podzapytania skorelowane - MySQL

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.



Napisz Artyku³

Listing

--Listing 1.0
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));




Dodano przez: divix
Ranga: Administrator serwisu Punktów: 0
Komentarze użytkowników
    • Tre¶æ komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2024 v.1.5 | design: diviXdesign & rainbowcolors