SQL kérdések - Szoftverfejlesztés fórum

üzenetek

hozzászólások


Töki
(tag)

A compute paranccsal nem akar együtt működni.


Töki
(tag)

SP2-0735: unknown COMPUTE option beginning ''round(avg,...''

Ezt a hiba üzenetet kapom.


Szaki@Pécs
(tag)

probléma:
van két tábala x és y és kéne törölni x-ből azokat a sorokat, melyekben lévő param1 és param2 nincs benne y-ban (egyszerre, egy sorban).

SELECT param1, param2 FROM x MINUS SELECT param1, param2 FROM y;

ez megadja a kívánt sorokat, de mindkét paramétert visszaadja ezért a

DELETE FROM a WHERE param1 = (SELECT param1, param2 FROM x MINUS SELECT param1, param2 FROM y);
nem müxik, too many values

megoldási javaslat?


sky77
(aktív tag)

Így esetleg?


delete from x
where param1 not in (select param1 from y)
and param2 not in (select param2 from y)



Mielőtt próbálgatod, azért valami biztonsági másolatot készíts!


L3zl13
(nagyúr)

Egy körben szvsz így:


delete from x where (param1, param2) not in (select param1, param2 from y)



Először szvsz delete helyett használj select *-ot és csekkold, hogy jó-e. Vagy biztonsági másolat.

Szerk: Az uccsó mondat a kérdezőnek szólt természetesen.

[Szerkesztve]


Szaki@Pécs
(tag)

select-et írtam a delete helyére próbálgatásra, és érdekes eredményt kaptam.

a select ... MINUS ... paranccsal 9 találat volt
az általad javasolt paranccsal csak 5

most megnézem a maradék 4el mi a helyzet.

Köszi a segítséget! :R


L3zl13
(nagyúr)

Az övé azért nem jó, mert nem egyszerre vizsgálja a két paramétert. Szóval ha bármelyik paraméter szerepel a táblában, akkor már nem kerül bele a listába. Függetlenül attól, hogy a másik paraméterrel egy sorban szerepelt-e vagy sem...

Ps az enyém sem biztos, hogy jó, persze ezért próbáld ki.
Ha így nem megy, akkor még trükközhetsz olyannal, hogy:

delete from x where (param1+param2) not in (select param1+param2 from y)

+ helyett a megfelelő szöveg összefűzés művelettel






[Szerkesztve]


Szaki@Pécs
(tag)

ok, megvan mind a 9 fentebb említett találat, köszi! :R


sky77
(aktív tag)

Igaz. Az ''egy sorban'' kitétel elkerülte a figyelmem.


metalcsiki
(csendes tag)

Hali! Nemtom hova kellene írni ez áll legközelebb a témához! Tudna nekem valaki segíteni a Poseidon nevű programban? Osztálydiagrammot és szekvenciadiagrammot kellene csinálnom és foggalmam nincs hogy! Légyszi segítsen valaki nagyon fontos lenne! Előre is köszi!


jeszi
(tag)

Van egy tábla, melyben a mezők: |telep| |megye| |nev| |id| |és még sok oszlop...|

Azokat a sorokat akarom megkapni, melyben a nev+megye csak egyszer szerepel.

Szóval ha 2 ''Nagy Béla'' van Hajdú-Biharban, akkor ő ne legyen benne az új táblában.

Ha csak az egyedi neveket nézem, akkor ez működik:

SELECT * FROM brick, [SELECT nev as onev, count(*) as db FROM brick GROUP BY nev having count(*) = 1]. AS [onev] WHERE nev = onev;


Tudja valaki a megoldást?


L3zl13
(nagyúr)

Első körben talán valahogy így...
Persze lehet, hogy van jobb megoldás.

SELECT * FROM brick, [SELECT CONCAT(nev, region) as nev_reg FROM brick GROUP BY nev_reg having count(*) = 1]. AS [nev_reg] WHERE nev_reg = CONCAT(nev, region);

Jah, CONCAT MySQL függvény. Nem tudom te mit használsz...

[Szerkesztve]


jeszi
(tag)

Sajnos buta Access. A CONCAT függvény nincs definiálva benne.


faster
(nagyúr)

Próbáld meg ezzel: || összefűzni a két mezőt.


jeszi
(tag)

Tévedtem, van CONCAT függvény, de mégsem jó a select. Azt írja ki, hogy:
''A kifejezésben szereplő 'CONCAT' függvény nincs definiálva.''


faster
(nagyúr)

Szerintem a CONCAT az eléggé mysql specifikus. A Microsoft féle Transact SQL-ben a + jelet tünteti fel, mint stringösszefűző operátort.

[Szerkesztve]


jeszi
(tag)

Köszi, a + jel tényleg összeolvassa a két mezőt.

Most próbálgatom, de nem akar összejönni a megoldás. :(


faster
(nagyúr)

Ez működik?

SELECT * FROM brick WHERE nev+region = (SELECT nev+region FROM brick GROUP BY nev, region HAVING count(*) = 1);

Sajnos nem tudtam kipróbálni.

[Szerkesztve]


jeszi
(tag)

Most nézem csak, hogy írtál nekem megoldást, mindjárt kipróbálom azt, de közben sikerült egy jó megoldást találnom:

SELECT * FROM brick,
[SELECT nev + megye as nev_megy FROM brick
GROUP BY nev + megye having count(nev + megye) = 1]. AS nev_megy
WHERE nev + megye=nev_megy;


Köszönöm a gyors segítséget nektek!


L3zl13
(nagyúr)

Nem ''in'' kell az egyenlő helyett? Nekem legalábbis az állna jobban kézre... :F

A beágyazott rész meg szvsz nem jó, ha külön group by-olod a két oszlop szerint... :F

üzenetek