SELECT a NULL

Martin Špirk martin.konference na seznam.cz
Úterý Květen 30 14:00:57 CEST 2006


Dne út 30. května 2006 12:46 Bobby Gontarski napsal(a):
> Mam tento dotaz (databaze PostgreSQL):
> SELECT A.name_last, B.name AS country FROM A, B WHERE B.id = A.country_id
> AND A.id = 3; Problem je v tom ze mi tento dotaz nevrati zadny radek.
> Pritom dotaz: SELECT A.name_last FROM A WHERE A.id = 3;
> Vrati jeden radek.
>
> Po dlouhem hledani na netu si myslim, ze by to mohlo byt tim, ze
> A.country_id obsahuje hodnotu NULL.
>
> Jenze ja nechci specifikovat u nekterych zaznamu tuto polozku
> (A.country_id) a treba ji pozdeji specifikovat. Jenze jinou hodnotu nez
> NULL a integer value to pole neakceptuje, a treba 0 (ktera neni
> specifikovana v B.id) zpusobi relacni chybu.
>
> 1) Je to ze prvni dotaz nevrati zadny radek opravdu tim, ze A.country_id
> obsahuje hodnotu NULL?

Ano.

> 2) Pokud ano, co ma A.country_id obsahovat aby nebyla specifikovana
> konkretni hodnota a prvni dotaz vratil radek?

A co si predstavujete ze v takovem pripade bude v B.name? Pokud se spokojite s 
NULL, pak zkuste neco takoveho:

select a.name_last,b.name from a left join b on a.county_id=b.id where a.id=3;

Left join (nekdy lze videt syntaxi outer) zpusobi, ze select vrati vysledek i 
kdyz se v zavisle tabulce nenajde odpovidajici veta, misto hodnot z teto 
tabulky je potom vracen NULL.

	Martin


Další informace o konferenci Test