zagadka o bazach
dzisiejsza zagadka to praktycznie crosspost z grupy newsowej pl.comp.bazy-danych, ale nie pamiętam dokładnie kto to wtedy pisał - jak się odezwie to oczywiście dam linka.
pytanie jest relatywnie proste.
mamy dwie tabele:
CREATE TABLE tab_a (
pole_a TEXT,
pole_b TEXT
);
CREATE TABLE tab_b (
pole_c TEXTwstawiamy do nich testowe dane:
);
INSERT INTO tab_a (pole_a, pole_b) VALUES ('a', '1');
INSERT INTO tab_a (pole_a, pole_b) VALUES ('b', '2');
INSERT INTO tab_a (pole_a, pole_b) VALUES ('c', '3');
INSERT INTO tab_a (pole_a, pole_b) VALUES ('d', '4');
INSERT INTO tab_b (pole_c) VALUES ('e');
INSERT INTO tab_b (pole_c) VALUES ('f');na razie nic trudnego. teraz - zaraz podam zapytanie o które chodzi, proszę - nie wykonuj tego u siebie. postaraj się domyśleć co to zapytanie zwróci:
SELECTi teraz - co to zapytanie zwróci:
*
FROM
tab_a
WHERE
pole_a IN ( SELECT pole_a FROM tab_b );
- nic, bo się wywali z błędem. jakim?
- nic, zwróci zero rekordów, ale błędu nie będzie.
- zwróci jakieś rekordy. jakie? ile?
prawda, że proste? na pewno?
November 19th, 2006 at 23:02
nic nie zwroci - wywali sie z bledem nieznana kolumna w podzapytaniu
November 20th, 2006 at 17:07
Pierwsza mysl — nic z bledem (nieznana kolumna w podzapytaniu). Druga mysl — produkt kartezjanski tab_a z jej kolumna pole_a, czyli 16 rekordow… i choc wyglada to podejrzanie, to postawie na ta druga mysl;-)
Pozdrawiam,
M.
PS: czy ten layout na blogu to na stale, czy tymczasowo? literki troche za male.
November 21st, 2006 at 17:21
Wszystkie rekordy z tab_a. Mamy na tapecie podzapytanie skorelowane, które za każdym razem wybiera 2 pasujące wartości, i in zwróci true.