[ nikitaGradov @ 28.02.2014. 15:19 ] @
Da ne pravim neki veliki uvod, evo teksta zadatka (uz uslov da sam pitanje 'smjestio' na pravu adresu, odnosno, podforum) - 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 ...
[ Dusan Kondic @ 01.03.2014. 06:39 ] @
Ne znam kakvog smisla ima ovakav zahtev, odnosno zbog čega izbeći WHERE klauzulu, ali evo jednog rešenja:
Code:
DECLARE @AAA NVARCHAR(100) = (SELECT l.Ime + ' ' + l.Prezime FROM Lica l INNER JOIN (SELECT 5 AS Id) t ON l.Id = t.Id)
[ nikitaGradov @ 01.03.2014. 11:04 ] @
Hvala na odgovoru ... ja nisam izmislio ovaj zadatak - radi se o zadatku sa testa za prijem u jednu (beogradsku) firmu ... u medjuvremenu, dobio sam jos jedno moguce rjesenje, koriscenjem HAVING clause ...

i mene zivo interesuje u cemu je poenta zadatka: da li je HAVING i/ili rjesenje koje si predlozio brze od WHERE clause ?
[ Dusan Kondic @ 01.03.2014. 11:33 ] @
Evo male igračke:
Code:
DECLARE @Lica TABLE (LiceId INT, Ime NVARCHAR(15), Prezime NVARCHAR(15))
INSERT INTO @Lica (LiceId, Ime, Prezime) VALUES (1, N'Jovan', N'Jovanović')
INSERT INTO @Lica (LiceId, Ime, Prezime) VALUES (2, N'Milan', N'Milanović')
INSERT INTO @Lica (LiceId, Ime, Prezime) VALUES (3, N'Marko', N'Marković')
INSERT INTO @Lica (LiceId, Ime, Prezime) VALUES (4, N'Mira', N'Jovanović')
INSERT INTO @Lica (LiceId, Ime, Prezime) VALUES (5, N'Jovana', N'Milovanović')
INSERT INTO @Lica (LiceId, Ime, Prezime) VALUES (6, N'Slađana', N'Perić')
INSERT INTO @Lica (LiceId, Ime, Prezime) VALUES (7, N'Zoran', N'Vidić')
INSERT INTO @Lica (LiceId, Ime, Prezime) VALUES (8, N'Zorica', N'Biljić')
INSERT INTO @Lica (LiceId, Ime, Prezime) VALUES (9, N'Milovan', N'Perišić')

DECLARE @I AS INT
DECLARE @Id AS INT
DECLARE @Vreme1 DATETIME
DECLARE @Vreme2 DATETIME
DECLARE @Vreme3 DATETIME
DECLARE @AAA NVARCHAR(100)

SET @Id = 5

SET @Vreme1 = GETDATE()
SET @I = 1
WHILE (@I < 10000)
BEGIN
    SET @AAA = (SELECT Ime + ' ' + Prezime FROM @Lica WHERE LiceId = @Id)
    SET @I = @I + 1
END
SELECT GETDATE() - @Vreme1

SET @Vreme2 = GETDATE()
SET @I = 1
WHILE (@I < 10000)
BEGIN
    SET @AAA = (SELECT l.Ime + ' ' + l.Prezime FROM @Lica l INNER JOIN (SELECT @Id AS Id) t ON t.Id = l.LiceId)
    SET @I = @I + 1
END
SELECT GETDATE() - @Vreme2

SET @Vreme3 = GETDATE()
SET @I = 1
WHILE (@I < 10000)
BEGIN
    SET @AAA = (SELECT Ime + ' ' + Prezime FROM @Lica GROUP BY Ime, Prezime HAVING MAX(LiceId) = @Id)
    SET @I = @I + 1
END
SELECT GETDATE() - @Vreme3
GO
[ nikitaGradov @ 01.03.2014. 18:05 ] @
Hvala na 'maloj igracki', barem je meni posluzila da nesto novo naucim ...

na mom laptop-u, HP 550, SQL Server Management Studio 'kaze' da je najbrze setovanje promenljive preko 'inner join' (sto, moram da priznam, nisam ocekivao), pa preko 'where' (skoro isto, nesto malo duze nego preko inner join, sto nisam ocekivao), a ubedljivo najsporije je preko 'having' ... pa je logicno pitanje, barem za mene, 'a sto bi neko koristio HAVING umjesto WHERE u ovakvoj situaciji' ? ili je pitanje imalo za cilj samo provjeru poznavanja, da se tako izrazim, sql naredbi ?

Jos jednom hvala na odvojenom vremenu i pozdrav ...
[ Dusan Kondic @ 01.03.2014. 18:16 ] @
Nema na čemu.
Eto ti ideje da sam praviš igračke i da se igraš ;-)