» »

Sql problem z operatorjem <> in AND!

Sql problem z operatorjem <> in AND!

ta_pravi ::

Pozdravljeni. Učim se osnov sql pa mi nekaj ne gre: iz tabele v kateri so stolpci: številka trgovca, številka artikla , številka kupca: bi rad izpisal samo tiste kupce, ki ne kupujejo pri trgovcu z številko 'T2', artikla z številko 'A3'. To sem probal z ukazom:

select kupcija.kid from kupcija where kupcija.tid != 'T5' and (kupcija.aid != 'A3')

Pa mi kar naprej izpisuje kot da bi vpisal pogoj ALI. Torej izpise mi samo tiste kupce ki niso kupili artikla z stevilko A3 in tiste ki niso kupili od trgovca z stevilko T2.

Kaj bi bilo narobe???
ta_pravi

BigWhale ::

Selektirat moras tudi artikle, kupce in trgovce. Vsaj tako se jaz spomnim.

fiction ::

"S stevilko". T2 ali T5?

Tisti, ki ne kupujejo pri trgovcu 'T5' artikla 'A3' so vsi minus tisti, ki pri trgovcu T5 kupujejo artikel A3.

SELECT kid FROM kupcija EXCEPT SELECT kid FROM kupcija WHERE tid = 'T5' AND aid = 'A3'
(oz. odvisno od baze: lahko je tudi MINUS namesto EXCEPT).

(kupcija.tid != 'T5') and (kupcija.aid != 'A3')
je vsaka vrstica kjer prodajalec ni T5 IN artikel ni A3: se pravi dobis vse kupce
ki so kdaj tudi kupili blago pri kaksnem drugem prodajalcu kot T5 oz. kupili
kaj drugega kot A3 (po logiki je tako malo prevec kupcev). Takoj, ko nek kupec kupi pri T5 A3
ni vec v igri, ne glede na to pri kom vse je se kupoval.

sherman ::

Pa mi kar naprej izpisuje kot da bi vpisal pogoj ALI. Torej izpise mi samo tiste kupce ki niso kupili artikla z stevilko A3 in tiste ki niso kupili od trgovca z stevilko T2.

Izpisuje ti čisto prav glede na to kar si napisal v pogoju.

Poglej si malo De Morgana.

Konkretno, če te prav razumem bi ti rad izbral tiste, ki niso kupili pri trgovcu T2 artikla A3, se pravi tiste pri katerih velja ne (T2 in A3), kar pa ni enako (ne T2) _in_ (ne A3), ampak (ne T2) _ali_ (ne A3) (glej link).

fiction ::

Ni zmeraj De Morgan tisti ki dela probleme.

"(tid != T2 ali aid != A3)" so tisti ki so vsaj enkrat kupili nekaj drugega razen A3 od T2.
"(tid != T2 in aid != A3)" so tisti ki so vsaj enkrat kupovali od kaksnega drugega trgovca kot T2 in kupili nekaj drugega kot A3.

Ce je vsak kupec kupoval samo enkrat potem je prva varianta kar ta_prava (druga ne uposteva
nakupa A4 od T2).
Samo fora je v tem, da to ponavadi ni res. Kupec je lahko kupil A3 od T2 pa se nekaj. In zaradi tistega
nekaj ne sme biti v rezultatu - s prvim nakupom je namrec ze "gresil". Ne smes torej gledati samo strogo katere vrstice
bos izbral, ampak kaksna mnozica kupcev bo izbrana - zato rabis kakorkoli ze (pomoje) 2 SELECT-a.

sherman ::

Se strinjam, da je rešitev ki si jo napisal tista, ki bi jo navadno hotel.

Jaz sem se takoj zapičil v negacijo in spregledal, kaj bi on sploh rad dobil (kupce, ne vrstic).:8)

ta_pravi ::

ej hvala za odgovore. Pogruntali smo da je za vprašanje ki sem ga postavil najbiljši ukaz naslednji:

SELECT K.kid from kupcija K, oseba O, artikel A, trgovec T WHERE K.tid = T.tid AND T.oid = O.oid AND O.mesto = 'Ankaran' AND K.aid = A.aid AND A.barva != 'Modra'

Hvala za vaše odgovore:)

...bom pa verjetno vprašal še kaj...:)
ta_pravi


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Ne pošiljamo v Slovenijo ?!?!

Oddelek: Kaj kupiti
4811330 (1541) Samael
»

[SQL] Pohitritev izpisa

Oddelek: Programiranje
252620 (1519) kuall
»

Vračilo preizkušenega artikla preko Mimovrste

Oddelek: Pomoč in nasveti
4711086 (5584) c3p0
»

Prodaja rezervnih delov avta

Oddelek: Na cesti
395149 (3882) Janac
»

Mimovrste nateguni (strani: 1 2 )

Oddelek: Loža
5521392 (17769) Gandalfar

Več podobnih tem