November 19th, 2006 by depesz | | 4 comments »
Did it help? If yes - maybe you can help me?

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 TEXT
);
wstawiamy 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:

SELECT
*
FROM
tab_a
WHERE
pole_a IN ( SELECT pole_a FROM tab_b );
i teraz – co to zapytanie zwróci:

  • 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?

  1. 4 comments

  2. Nov 19, 2006

    nic nie zwroci – wywali sie z bledem nieznana kolumna w podzapytaniu

  3. # Michal
    Nov 20, 2006

    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.

  4. # Maniek
    Nov 21, 2006

    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.

Leave a comment