select distinct a NULL

Honza Pazdziora adelton na informatics.muni.cz
Pátek Listopad 1 10:42:16 CET 2002


On Fri, Nov 01, 2002 at 10:30:54AM +0100, "Zíka Aleš, Ing." wrote:
> 
> 	Myslel jsem ze plati NULL != NULL, takze by tam radky s NULL

No, tohle je dost silne tvrzeni. Plati, ze NULL = NULL nevrati true a
NULL <> NULL nevrati true. Ale ze by platilo NULL != NULL, to teda moc
ne. Kdyby to totiz platilo, tak byste musel byt schopen od sebe
odlisit zaznamy

	( 1, 5, null )
	( 1, 5, null )

podobne jako jste schopen odlisit zaznamy

	( 1, 5, 90 )
	( 1, 5, 91 )

A to nejste. Nejste schopen napsat podminku, ktera Vam pouze na
zaklade hodnot tech atributu vrati jeden ten konkretni zaznam, jenom
ten prvni ( 1, 5, null ) nebo jenom ten druhy. Samozrejme pomijim ruzne
oid a rowid a tak, protoze to uz neni cista relacni zalezitost.

> hodnotou mely byt vsechny. Kdyz na to pole udelam UNIQUE index, nedovoli mi
> tam dat dve desitky, ale vic NULL mu nevadi.

Protoze ta semantika je jina -- unique se zabyva pouze definovanymi
hodnotami, coz NULL neni. Podobne treba foreign klic se netestuje,
pokud hodnota v te zavisle tabulce je NULL -- protoze to proste neni
definovana hodnota, se kterou by se daly delat operace jako = nebo
<>.

> 	Jak to teda je, je to chovani SELECT DISTINCT normalni, nebo to je
> chyba?

Povazoval bych to za normalni a spravne, zvlaste za situace, kdy jsem
ted vyzkousel, ze Oracle se chova stejne. ;-))

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
      ... all of these signs saying sorry but we're closed ...
------------------------------------------------------------------------


Další informace o konferenci Databases