Case when ... Then ... Else?
Evo teksta zadatka (tema je SQL):
- data je promjenljiva, recimo, @AAA nvarchar(100) i nekakva tabela, recimo dbo.Lica, a u toj tabeli postoje polja: Ime, Prezime i, jasno, Lice_ID
- zadatak: promjenljivoj @AAA dodeijliti vrijednost 'Ime', pa 'razmak', pa 'Prezime', iz tabele dbo.Lica, pri cemu je Lice_ID = 5, ALI BEZ koriscenja WHERE clause i kursora. Cak stavise, dati dva takva rjesenja ...
Ja , da budem posten, ne znam kako ovo da uradim bez koriscenja WHERE clause ... imas li neku ideju kako se to radi ?
Veliki pozdrav i unaprijed hvala ...
Doljani forever ...
Case when ... Then ... Else?
Ja sam, u medjuvremenu, dosao do rjesenja ... tako da, sto se mene tice, moderatori mogu da 'zatvore' ovu temu ...
Pozdrav
Doljani forever ...
Kakav si ti kralj. Pa napisi koje je rjesenje mozda ce jos nekome koristiti ne razumijem takav postupak - moze lock ja sam nasao rjesenje a ko nadje temu na pretragu i bude imao isto problem nek otvara novu temu dje ce opet isto pitat jer ti nisi podijelio rjesenje sa drugima.
Послато са LT22i уз помоћ Тапатока
17 Al-Isra, 37:
Ne hodi po zemlji nadmeno, jer zemlju ne možeš probiti ni brda u visinu dostići.
U redu, prihvatam 'kritiku', nije bila zelja da 'kraljujem' ... rjesenja su, makar dva, da li ima i vise, ne znam ...
Jedno je koriscenjem HAVING clause, drugo je koriscenjem INNER JOIN konstrukcije ...
================================================== ===============================
koriscenje HAVING clause:
SET @Id = 5 -- znaci, ID, odnosno primary key, je neka fiksna vrijednost
DECLARE @AAA NVARCHAR(100) --- AAA je promenljiva koju treba setovati bez koriscenja WHERE clause
-- pretpostavka je da postoji tabela Lica, sa poljima: LiceID, Ime i Prezime
SET @AAA = (SELECT Ime + ' ' + Prezime FROM @Lica GROUP BY Ime, Prezime HAVING MAX(LiceId) = @Id)
================================================== ================================
koriscenje INNER JOIN konstrukcije:
SET @AAA = (SELECT l.Ime + ' ' + l.Prezime FROM @Lica l INNER JOIN (SELECT @Id AS Id) t ON t.Id = l.LiceId)
================================================== ================================
E sad, ono sto je , barem za mene, interesantno: sto bi iko koristio navedene konstrukcije, a ne WHERE ?
Inace, ovaj zadatak ja nisam izmislio - radi se o test zadatku sa jednog konkursa (za posao) u Bgd-u ...
Pozdrav uz izvinjenje ako sam se 'ogrijesio' o pravila CDM-a ...
Doljani forever ...
Nisi se ogrijesio to je samo neko nepisano praviko. Takav zadatak se koristi da bi provjerili koliko neko duboko zna sql vjerovatno. Inace having se koristi kada gore u upitu koristis neku od ugradjenih funkcija eto npr tu max() a slazem se da je glupo koristiti to pored where. Ali eto to je vjerovatno samo za test.
Послато са LT22i уз помоћ Тапатока
17 Al-Isra, 37:
Ne hodi po zemlji nadmeno, jer zemlju ne možeš probiti ni brda u visinu dostići.
> Takav zadatak se koristi da bi provjerili koliko neko duboko zna sql vjerovatno
Pa, to je i bila neka moja procjena. Mada, koliko je ovo pitanje 'smisleno' je, po meni, za diskusiju ... to jest, koliko kandidat koji je znao odgovor na ovo pitanje (ja nisam) predstavlja bolji izbor od nekog ko poznaje i SQL i spregu sa .NET okruzenjem ? a takav kandidat se i trazio (no, to je, na kraju krajeva, stvar politike same firme).
Ja se bavim C#-om i .NET okruzenjem od 2006-e godine. Moje znanje SQL-a je, usudio bih se da kazem, solidno, ali nije vrhunsko. Ili da preciziram: smatram da dovoljno dobro poznajem SQL u dijelu , da se tako izrazim, sprege SQL-a sa C#-om i .NET okruzenjem: pisanje uskladistenih procedura, konekcionih stringova, insert, update, delete podataka ... recimo, koristio sam (u dosadasnjoj praksi) neuporedivo slozenije INNER JOIN konstrukcije nego sto je ova koju sam naveo kao mogucnost rada bez WHERE clause ... ali, ne bi mi palo na pamet da umjesto WHERE koristim INNER JOIN, a sigurno ne HAVING ...
Upravo zelja da naucim kako ovo uraditi me je i motivisala da objavim ovo pitanje na CDM-u ...
Mozda grijesim, ali ja licno, ni u buducem radu necu koristiti ovakve konstrukcije za ovakve trivijalne probleme, umjesto WHERE konstrukcije ...
Doljani forever ...
Pa normaono glupo je ovo koristiti umjesto where. Ne samo glupo nego puno sporije za pretragu od where. Zamisli rad sa stotinama hiljada podataka sa koriscenjem inner joina umjesto where. Totalna glupost dati takav zadatak pored milion drugih razumnih zadataka kroz koje ce se provjerit znanje having i joinova.
Послато са LT22i уз помоћ Тапатока
17 Al-Isra, 37:
Ne hodi po zemlji nadmeno, jer zemlju ne možeš probiti ni brda u visinu dostići.
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks