A compute paranccsal nem akar együtt működni.
SQL kérdések - Szoftverfejlesztés fórum
hozzászólások
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!
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!
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.
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!