- Fórumok
- Szoftverfejlesztés
- SQL kérdések
- (kiemelt téma)
- sziku69: Fűzzük össze a szavakat :)
- gban: Ingyen kellene, de tegnapra
- Mr Dini: Mindent a StreamSharkról!
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Luck Dragon: Asszociációs játék. :)
- Nyuszit otthonra, kedvencnek!
- Archttila: SMART tesztelés automatizálva: smartctl poller script Zsh-ban, RPi-re
- MasterDeeJay: Low budget (50.000 forint) light gémer gép összerakása
- Geri Bátyó: Agglegénykonyha 15 – Néhány tavaszias recept
- sziku69: Szólánc.
-
4900 - 4801
6041 - 6001 6000 - 5901 5900 - 5801 5800 - 5701 5700 - 5601 5600 - 5501 5500 - 5401 5400 - 5301 5300 - 5201 5200 - 5101 5100 - 5001 5000 - 4901 4900 - 4801 4800 - 4701 4700 - 4601 4600 - 4501 4500 - 4401 4400 - 4301 4300 - 4201 4200 - 4101 4100 - 4001 4000 - 3901 3900 - 3801 3800 - 3701 3700 - 3601 3600 - 3501 3500 - 3401 3400 - 3301 3300 - 3201 3200 - 3101 3100 - 3001 3000 - 2901 2900 - 2801 2800 - 2701 2700 - 2601 2600 - 2501 2500 - 2401 2400 - 2301 2300 - 2201 2200 - 2101 2100 - 2001 2000 - 1
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Tabletek, E-bookok Nyomtatók, szkennerek PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
Új hozzászólás Aktív témák
-
tm5
tag
Nem teljesen értem, hogy a group by 2 hogy összegezné a 2,3,4-et. Nem írnád meg a teljes verziódat?
Anyúgy persze igazad van, általában lassít a case a group by-ban, de azért ha nem nagy a tábla vagy rendes szerver van alatta, akkor ez nem érdekes. -
bambano
titán
kettő darab case-t futtatni egy group by 2 helyett erősen lassító elképzelés.
-
tm5
tag
select sum(value)
,case
when sector = 1 then '1'
when sector in (2, 3, 4) then '2, 3, 4'
when sector = 5 then '5'
end
from test
group by
case
when sector = 1 then '1'
when sector in (2, 3, 4) then '2, 3, 4'
when sector = 5 then '5'
endJó ez teljesen, nem lesz ez annyira lassú. Picit mondjuk lehet még egyszerűsíteni rajta:
select sum(value)
,case
when sector in (2, 3, 4) then 2
else sector
end sector_
from test
group by
case
when sector in (2, 3, 4) then 2
else sector
end -
Apollo17hu
őstag
-
bambano
titán
select sum(value)
,case
when sector = 1 then '1'
when sector in (2, 3, 4) then '2, 3, 4'
when sector = 5 then '5'
end
from test
group by
case
when sector = 1 then '1'
when sector in (2, 3, 4) then '2, 3, 4'
when sector = 5 then '5'
endnagy erőkkel lassítod a lekérdezést?

miért nem group by 2? -
Apollo17hu
őstag
Sziasztok!
Adott egy tábla:
CREATE TABLE test(value integer,sector integer,id integer NOT NULL DEFAULT nextval('test_id_seq'::regclass),CONSTRAINT pk PRIMARY KEY (id));A sector (értéke 1 - 5-ig terjedhet).
Egy olyan lekérdezést szeretnék írni, amely összegzi a value mező értékeit és csoportosítja szektor alapján az adatokat, de úgy, hogy a 2-es, 3-as és 4-es szektort összevonja, azaz egyben kezelje. Tehát ne 5, hanem 3 sort adjon vissza.
Nem egy bonyolult történet, de ezt egy lekérdezésben akarom megvalósítani, az eredeti tábla módosítása nélkül.SELECT SUM(value), sector FROM test GROUP BY sector;Szerintetek hogyan lehet ezt a legegyszerűbb, leggyorsabb módon megvalósítani? Elég sok rekord lesz a táblában.
select sum(value)
,case
when sector = 1 then '1'
when sector in (2, 3, 4) then '2, 3, 4'
when sector = 5 then '5'
end
from test
group by
case
when sector = 1 then '1'
when sector in (2, 3, 4) then '2, 3, 4'
when sector = 5 then '5'
end -
kw3v865
senior tag
Sziasztok!
Adott egy tábla:
CREATE TABLE test(value integer,sector integer,id integer NOT NULL DEFAULT nextval('test_id_seq'::regclass),CONSTRAINT pk PRIMARY KEY (id));A sector (értéke 1 - 5-ig terjedhet).
Egy olyan lekérdezést szeretnék írni, amely összegzi a value mező értékeit és csoportosítja szektor alapján az adatokat, de úgy, hogy a 2-es, 3-as és 4-es szektort összevonja, azaz egyben kezelje. Tehát ne 5, hanem 3 sort adjon vissza.
Nem egy bonyolult történet, de ezt egy lekérdezésben akarom megvalósítani, az eredeti tábla módosítása nélkül.SELECT SUM(value), sector FROM test GROUP BY sector;Szerintetek hogyan lehet ezt a legegyszerűbb, leggyorsabb módon megvalósítani? Elég sok rekord lesz a táblában.
-
tm5
tag
SELECT a.datum, b.data1, b.data2FROM a, bWHERE a.datum = b.datum(+)and b.notes(+) = 007;
Így már megint outer join lesz az inner-ből. -
Apollo17hu
őstag
Előbb kell szűrnöd a "B" táblára, és a szűrt "B" táblát kell az "A" táblához kötnöd:
SELECT a.datum, b.data1, b.data2FROM a,(SELECT b.datum, b.data1, b.data2FROM bWHERE b.notes = 007) bWHERE a.datum = b.datum(+); -
disy68
aktív tag
and b.notes = 007
mert ezzel azokat a sorokat kéred csak le, amiknél a b tábla notes értéke 007 és ebből gondolom van 3 sorod -
RedHarlow
aktív tag
SELECT a.datum, b.data1, b.data2FROM a, bWHERE a.datum = b.datum(+)Így néz ki a lekérdezésem:
SELECT a.datum, b.data1, b.data2FROM a, bWHERE a.datum = b.datum(+)and b.notes = 007;És ugyan úgy 3 sor jön le és nem értem hogy miért. :/
-
Apollo17hu
őstag
SELECT a.datum, b.data1, b.data2FROM a, bWHERE a.datum = b.datum(+) -
RedHarlow
aktív tag
-
kw3v865
senior tag
Sziasztok!
PostgreSQL-ben timestamp indexelésre szerintetek melyik a legoptimálisabb index típus? BTREE helyett érdemes lehet BRIN-t használni? Vagy valami mást?
-
Ispy
nagyúr
Bocsi, a szint az ugyanaz mint a szobaszám, csak a kódban is felváltva használom. Minden mező egy táblához tartozik igen.
Az egész amúgy egy foglaló rendszerhez lesz, ahol szintenként lehet adott időpontra foglalni szobát, és adott szinten adott idősávban egyszerre egy foglalás lehet. És ehhez kéne megjelenítenem minden szinthez az időben következő eseményt ami még nem kezdődött el.
Subselect?
Az első selectben leválogatod azokat az eseményeket, ahol a dátum nagyobb, mint az aktuális dátum, majd veszed a min függvénnyel ezek közül minden szobához a dátumot. Leírni most nem fogom telefonról.
-
Apollo17hu
őstag
Bocsi, a szint az ugyanaz mint a szobaszám, csak a kódban is felváltva használom. Minden mező egy táblához tartozik igen.
Az egész amúgy egy foglaló rendszerhez lesz, ahol szintenként lehet adott időpontra foglalni szobát, és adott szinten adott idősávban egyszerre egy foglalás lehet. És ehhez kéne megjelenítenem minden szinthez az időben következő eseményt ami még nem kezdődött el.
#keretlentanacs
elso korben kipucolnam a kodbol a szintet/szobat, es egy terminust hasznalnek
-
cattus
addikt
Van esemény, szobaszám, kezdő és befejezési időpont. Eddig oké. De mi az a szint? Az is egy külön attribútum külön mezőben? Minden mező egy adattáblában van?
Vmi ilyesmire lesz szükséged, ahonnan a megképzett "sorrend" mezőnek veheted később a minimumát:
RANK() OVER(PARTITION BY szint ORDER BY kezdo_idopont) AS sorrend
Arra kell figyelni, hogy RANK() esetén több minimum is lehet, ha a sorrendiség nem egyértelmű.Bocsi, a szint az ugyanaz mint a szobaszám, csak a kódban is felváltva használom. Minden mező egy táblához tartozik igen.
Az egész amúgy egy foglaló rendszerhez lesz, ahol szintenként lehet adott időpontra foglalni szobát, és adott szinten adott idősávban egyszerre egy foglalás lehet. És ehhez kéne megjelenítenem minden szinthez az időben következő eseményt ami még nem kezdődött el.
-
Apollo17hu
őstag
Hali!
Egy adatbázisban vannak tárolva események mindegyikhez tartozik egy szobaszám (3 és 18 között fixen), plusz egy kezdő és befejezési időpont. Arra lenne szükségem, hogy minden szintre lekérdezzem a legközelebbi jövőbeli eseményt (ha nincs ilyen, akkor null legyen).
Elsőre arra gondoltam, hogy minden szintre futtatok egy select-et a megfelelő szűrőkkel és abból kiveszem az első rekordot, de gondoltam megkérdezem, hogy tud-e valaki ennél egy szebb megoldást?
Van esemény, szobaszám, kezdő és befejezési időpont. Eddig oké. De mi az a szint? Az is egy külön attribútum külön mezőben? Minden mező egy adattáblában van?
Vmi ilyesmire lesz szükséged, ahonnan a megképzett "sorrend" mezőnek veheted később a minimumát:
RANK() OVER(PARTITION BY szint ORDER BY kezdo_idopont) AS sorrend
Arra kell figyelni, hogy RANK() esetén több minimum is lehet, ha a sorrendiség nem egyértelmű. -
cattus
addikt
Hali!
Egy adatbázisban vannak tárolva események mindegyikhez tartozik egy szobaszám (3 és 18 között fixen), plusz egy kezdő és befejezési időpont. Arra lenne szükségem, hogy minden szintre lekérdezzem a legközelebbi jövőbeli eseményt (ha nincs ilyen, akkor null legyen).
Elsőre arra gondoltam, hogy minden szintre futtatok egy select-et a megfelelő szűrőkkel és abból kiveszem az első rekordot, de gondoltam megkérdezem, hogy tud-e valaki ennél egy szebb megoldást?
-
martonx
veterán
-
lenoma
aktív tag
dbForge Query Builder for SQL Server
helyett tudtok ajánlani más programot kezdőknek? -
Taci
addikt
Ez a megoldás azért lassú, mert csináltál egy Descartes-szórzatot a két táblából, azaz minden halmaz minden elemét összeköti szépen minden halmaz minden elemével (vesszővel felsorolás). A helyes ahogy írtad is az union, csak figyelni kell, mert ha nincsen all, akkor az azonos rekordokat csak egyszer hozza a halmazokból.
Ah, akkor ahhoz képest hogy mennyi adattal milyen művleteket végeztettem vele, még gyors is volt...

Köszi a felvilágosítást!
És igen, kell az ALL is, mert egy-egy dátumból több is előfordulhat, és nekem mindegyikre szükségem van.
Köszönöm!

-
Ispy
nagyúr
Sziasztok!
A segítségeteket szeretném kérni:
Adott több tábla, mindegyikben több rekord, minden rekordnak sok mezője. A táblákban a mezők ugyanolyan névvel, típussal vannak létrehozva és feltöltve.
Ezek közül az egyik egy időbélyegző, hogy a rekord mikor került az adatbázisba.Ha csak az egyik táblából kérdezem le az adatokat, villámgyors minden:
SELECT * FROM table_1 ORDER BY date DESC LIMIT 4 OFFSET 4Szeretném kettő vagy akár az összes többi táblából lekérni az adatokat, és ezeket dátum szerint rendezve megjeleníteni.
Viszont ha kettő vagy több táblából kérem le ezeket az adatokat, egyrészt nagyon-nagyon lassú, másrészt nem a jó adatokat, vagy nem a jó sorrendben adja vissza.Ezzel a lekérdezéssel próbáltam:
SELECT * FROM table_1, table_2 ORDER BY table_1.date DESC LIMIT 4 OFFSET 4Itt elsőre azzal próbáltam, hogy
ORDER BY date, de azt mondta, ez nem helyes így, mert adatemező több táblában is megtalálható. Ezért próbálkoztam így aztán.Egészen biztosan nem ez a jó módja a lekérdezésnek.
Hogyan kell ezt jól megcsinálni? Összesen egyszerre 4 rekordot kérek csak le, ennek villámgyorsnak kellene lennie, úgy, ahogy amúgy 1 táblánál az is.Köszönöm előre is a segítséget.
Ez a megoldás azért lassú, mert csináltál egy Descartes-szórzatot a két táblából, azaz minden halmaz minden elemét összeköti szépen minden halmaz minden elemével (vesszővel felsorolás). A helyes ahogy írtad is az union, csak figyelni kell, mert ha nincsen all, akkor az azonos rekordokat csak egyszer hozza a halmazokból.
-
Taci
addikt
Sziasztok!
A segítségeteket szeretném kérni:
Adott több tábla, mindegyikben több rekord, minden rekordnak sok mezője. A táblákban a mezők ugyanolyan névvel, típussal vannak létrehozva és feltöltve.
Ezek közül az egyik egy időbélyegző, hogy a rekord mikor került az adatbázisba.Ha csak az egyik táblából kérdezem le az adatokat, villámgyors minden:
SELECT * FROM table_1 ORDER BY date DESC LIMIT 4 OFFSET 4Szeretném kettő vagy akár az összes többi táblából lekérni az adatokat, és ezeket dátum szerint rendezve megjeleníteni.
Viszont ha kettő vagy több táblából kérem le ezeket az adatokat, egyrészt nagyon-nagyon lassú, másrészt nem a jó adatokat, vagy nem a jó sorrendben adja vissza.Ezzel a lekérdezéssel próbáltam:
SELECT * FROM table_1, table_2 ORDER BY table_1.date DESC LIMIT 4 OFFSET 4Itt elsőre azzal próbáltam, hogy
ORDER BY date, de azt mondta, ez nem helyes így, mert adatemező több táblában is megtalálható. Ezért próbálkoztam így aztán.Egészen biztosan nem ez a jó módja a lekérdezésnek.
Hogyan kell ezt jól megcsinálni? Összesen egyszerre 4 rekordot kérek csak le, ennek villámgyorsnak kellene lennie, úgy, ahogy amúgy 1 táblánál az is.Köszönöm előre is a segítséget.
Úgy látom, UNION (ALL) fog talán kelleni. Már nézem is.
És igen, ez lett az:
SELECT * FROM table_1 UNION ALL SELECT * FROM table_2 ORDER BY date DESC LIMIT 4 OFFSET 4 -
Taci
addikt
Sziasztok!
A segítségeteket szeretném kérni:
Adott több tábla, mindegyikben több rekord, minden rekordnak sok mezője. A táblákban a mezők ugyanolyan névvel, típussal vannak létrehozva és feltöltve.
Ezek közül az egyik egy időbélyegző, hogy a rekord mikor került az adatbázisba.Ha csak az egyik táblából kérdezem le az adatokat, villámgyors minden:
SELECT * FROM table_1 ORDER BY date DESC LIMIT 4 OFFSET 4Szeretném kettő vagy akár az összes többi táblából lekérni az adatokat, és ezeket dátum szerint rendezve megjeleníteni.
Viszont ha kettő vagy több táblából kérem le ezeket az adatokat, egyrészt nagyon-nagyon lassú, másrészt nem a jó adatokat, vagy nem a jó sorrendben adja vissza.Ezzel a lekérdezéssel próbáltam:
SELECT * FROM table_1, table_2 ORDER BY table_1.date DESC LIMIT 4 OFFSET 4Itt elsőre azzal próbáltam, hogy
ORDER BY date, de azt mondta, ez nem helyes így, mert adatemező több táblában is megtalálható. Ezért próbálkoztam így aztán.Egészen biztosan nem ez a jó módja a lekérdezésnek.
Hogyan kell ezt jól megcsinálni? Összesen egyszerre 4 rekordot kérek csak le, ennek villámgyorsnak kellene lennie, úgy, ahogy amúgy 1 táblánál az is.Köszönöm előre is a segítséget.
-
lenoma
aktív tag
A feladatsor amit átküldtél tényleg elég részletes, és valszeg több este is le kell ülnöd a gép elé, hogy meglegyél vele 1 hét alatt. Viszont mindent amit ez a felkészítő feladatsor követel biztosan benne van a tananyagban, vagy a google kiköpi, ha okosan keresel.
Szóval ma rugjál be és dühöngd ki magad, hogy mégis mit gondol ez a tanár és holnap kezd el csinálni, mert csak így fogsz tudni végezni vele.
fogd fel etzt a felkészítő feladatsort, hogy egy labogyakorlat.
Jártam jó pár adatbázis tanfolyamon az elmúlt 30 évben és azok jobbára 3-5 nap alatt nyomták le ezt az anyagot, de tele volt tűzdelve laborgyakorlatokkal, amiben ehhez hasonló feladatok voltak. A tanköny + a tanár segítségével megoldottuk. Most neked a tanár helyett a google marad. Viszont amit 1x megcsinálsz arra tuti emlékezni fogsz, legalább nagyvonalakban. Arra elég, hogy túléld a 36 perces vizsgákat. Ennyi időbe a feladatok töredéke fog beleférni.
Hidd el csak az segít, ha elkezded csinálni.Köszönöm a jótanácsot.
Közben megoldottam, szereztem magántanárt.
Ehhez képest a vizsga semmiség lesz. Csak nem lesz rá szükségem a jövőben.
Közben rájött a tanár, hogy túltolta a szintünkhöz képest. -
tm5
tag
Elküldöm Neked a 2 tesztsort véleményezésre.
A főiskolai tanár 2 hét alatt lenyomott kb 1 szemeszternyi tananyagot.
Itt már a vizsga felkészítésről van só a tanultak alapján.
A tanár jelezte is, hogy ez a teszt Halálos iramban miközben a vizsga 45km/h-val városi közlekedés lesz ami amúgy az 5-ös Junior Rendszerüzemeltető szint helyett 4-es szakmunkásképző Juniur rendszerüzemeltető képzés az állami programozó képzés keretében.
Célom, hogy a sulitól a valós vizsgára felkészítést kérjek és nem egy maximalista tanár elvárásait.
Amúgy a képzés után lehet szakosodni és ott két hónapig egy tárgyat tanulni intenzíven, szerintem annak a kérdésit tolta most elénk, a tanultakból /0-2hét/ oldjuk meg önállóan és adjuk le még ezen a héten. Csak nála volt bukás a szintfelmérőkön /kb 50%/a többin szinte mindenki átment.
A többi tárgy simán megy ma írtam 100%-os 3. negyedéves állami szintfelmérőt /SQL nem volt benne/A feladatsor amit átküldtél tényleg elég részletes, és valszeg több este is le kell ülnöd a gép elé, hogy meglegyél vele 1 hét alatt. Viszont mindent amit ez a felkészítő feladatsor követel biztosan benne van a tananyagban, vagy a google kiköpi, ha okosan keresel.
Szóval ma rugjál be és dühöngd ki magad, hogy mégis mit gondol ez a tanár és holnap kezd el csinálni, mert csak így fogsz tudni végezni vele.
fogd fel etzt a felkészítő feladatsort, hogy egy labogyakorlat.
Jártam jó pár adatbázis tanfolyamon az elmúlt 30 évben és azok jobbára 3-5 nap alatt nyomták le ezt az anyagot, de tele volt tűzdelve laborgyakorlatokkal, amiben ehhez hasonló feladatok voltak. A tanköny + a tanár segítségével megoldottuk. Most neked a tanár helyett a google marad. Viszont amit 1x megcsinálsz arra tuti emlékezni fogsz, legalább nagyvonalakban. Arra elég, hogy túléld a 36 perces vizsgákat. Ennyi időbe a feladatok töredéke fog beleférni.
Hidd el csak az segít, ha elkezded csinálni. -
lenoma
aktív tag
Elküldöm Neked a 2 tesztsort véleményezésre.
A főiskolai tanár 2 hét alatt lenyomott kb 1 szemeszternyi tananyagot.
Itt már a vizsga felkészítésről van só a tanultak alapján.
A tanár jelezte is, hogy ez a teszt Halálos iramban miközben a vizsga 45km/h-val városi közlekedés lesz ami amúgy az 5-ös Junior Rendszerüzemeltető szint helyett 4-es szakmunkásképző Juniur rendszerüzemeltető képzés az állami programozó képzés keretében.
Célom, hogy a sulitól a valós vizsgára felkészítést kérjek és nem egy maximalista tanár elvárásait.
Amúgy a képzés után lehet szakosodni és ott két hónapig egy tárgyat tanulni intenzíven, szerintem annak a kérdésit tolta most elénk, a tanultakból /0-2hét/ oldjuk meg önállóan és adjuk le még ezen a héten. Csak nála volt bukás a szintfelmérőkön /kb 50%/a többin szinte mindenki átment.
A többi tárgy simán megy ma írtam 100%-os 3. negyedéves állami szintfelmérőt /SQL nem volt benne/ -
tm5
tag
Ok, de mi a célod ezzel az átnézéssel? Ha most azt mondjuk, hogy, igen, sokat követel a tanár akkor előrébb vagy?
IMHO, inkább tanulj és ha valamit nagyon nem értesz akkor kérdezz rá itt és elmagyarázzuk. -
lenoma
aktív tag
Sziasztok!
Profi SQL-est keresek aki megnézne 2db tesztsort, hogy mennyire normális a tanárunk ha 2 hét után elénk teszi ezt vizsga felkészítésnek.
Tippre fél szemeszternyi képzés kérdései 2 hetes nulláról képzésre.
A tanárunk zseniális szakember csak nem kicsit maximalista. -
bambano
titán
Sziasztok,
SQL-ben lévő változó értékét, hogy tudom php-ben módosítani? Arról van szó, hogy ha jól tudom az oracle ha megjegyzi az adott query-t legközelebb gyorsan le fog futni de mivel nekem szükséges lenne a hónapokat állíthatóra tenni így mindig újként érzékelné, azonban ha jól gondolom egy változó lenne benne a dátum akkor mindig az alap terv szerint futna le, ezt a változót viszont módosítanom kellene valahogy php-vel? Tudtok ebben segíteni, hogy ez hogy is néz ki? Van e egyáltalán ilyen? Esetleg egy link is elég, ahol erről bővebben olvashatok.
Előre is köszönöm a segítséget. -
RedHarlow
aktív tag
Sziasztok,
SQL-ben lévő változó értékét, hogy tudom php-ben módosítani? Arról van szó, hogy ha jól tudom az oracle ha megjegyzi az adott query-t legközelebb gyorsan le fog futni de mivel nekem szükséges lenne a hónapokat állíthatóra tenni így mindig újként érzékelné, azonban ha jól gondolom egy változó lenne benne a dátum akkor mindig az alap terv szerint futna le, ezt a változót viszont módosítanom kellene valahogy php-vel? Tudtok ebben segíteni, hogy ez hogy is néz ki? Van e egyáltalán ilyen? Esetleg egy link is elég, ahol erről bővebben olvashatok.
Előre is köszönöm a segítséget. -
Ferfiu
tag
Olyan oldalt vagy esetleg egyetemi jegyzetet tudtok, ami viszonylag nehezebb sql-lekérdezési feladatokat/példákat tartalmaz? Elsősorban a táblakapcsolatok, többszörös JOIN-ok, egymásba ágyazások érdekelnének.
-
Apollo17hu
őstag
Olyan oldalt vagy esetleg egyetemi jegyzetet tudtok, ami viszonylag nehezebb sql-lekérdezési feladatokat/példákat tartalmaz? Elsősorban a táblakapcsolatok, többszörös JOIN-ok, egymásba ágyazások érdekelnének.
-
nyunyu
félisten
-
tm5
tag
Az a helyzet, hogy sqlfiddleben vagdostam össze, internetes szösszenetek alapján.
Nem használtam MSSQL-t az elmúlt 8 évben, bár lehet a következő munkám már megint ott lesz.
Oracleben nyomultam mostanság, ott elég jó ez a FORMAT() dolog és valami hasonlót kerestem MSSQL-ben is. -
Ispy
nagyúr
-
picur10
aktív tag
-
tm5
tag
-
martonx
veterán
-
picur10
aktív tag
-
Apollo17hu
őstag
-
picur10
aktív tag
SELECT LPAD(ora, 2, '0') || LPAD(perc, 2, '0') FROM tabla;bocsánat, az lemaradt, hogy mssql-re kellene
-
Apollo17hu
őstag
SELECT LPAD(ora, 2, '0') || LPAD(perc, 2, '0') FROM tabla; -
picur10
aktív tag
Egy kis select segítséget kérek.

Óra és perc van külön numerikus mezőben letéve. Hogy lehet a legegyszerűbben óó:pp formátumban stringként kiíratni? Úgy szeretném, hogy mindig két-két karakter legyen, tehát pl. a dél ne így nézzen ki: 12:0
Köszi! -
DS39
nagyúr
-
Kommy
veterán
jó az irány.
még group by-old a külső select-et névre és telefonszámra, és az id-t MIN()-eld.
ezt mentsd el egy temp táblába, majd a temp táblához join-old be a partner táblát, név és telefonszám alapján + temp.ID <> partner.ID
így meglesz egy rekordban a duplikált partner régi és új id-ja, ezzel már könnyen meg tudod írni az update-t, hogy a kölcsönzés táblában mit mire kell cserélni.
+ én még a partner táblát bővíteném egy oszloppal, hogy törölt / archív, és a régi id-ek megjelölném, így később ki lehet őket szűrni.Nagyon szépen köszönöm az iránymutatást, sikerült is megcsinálni.
-
DS39
nagyúr
Szeretném megcsinálni azt, hogy vannak partnereink akik sajnos valami folytán kétszer kerültek be az adatbázisunkba és szeretném a kölcsönzéseiket összevonni az újabb regisztrációba.
Név és telefonszám alapján le is tudom kérdezni a listát ahol látom az összes duplikációt.
A lényeg az lenne, hogy a régebbi partnerhez tartozó kölcsönzéseket átrakjam az új partnerre.
A kölcsönzések tábla tartalmazza természetesen a partnerid-t, így ott kellene valahogy kicserélnem a régi az újra.Itt e lekérdezés a duplikációkra itt szépen látom az id-t, a nevet és a telefonszámot.
SELECT
y.id,y.nev, y.Kapcsolat
FROM Partnerek y
INNER JOIN (SELECT
nev, kapcsolat, COUNT(*) AS CountOf
FROM Partnerek
GROUP BY nev, Kapcsolat
HAVING COUNT(*)>1
) dt ON y.kapcsolat=dt.kapcsolat order by Kapcsolat
[kép]jó az irány.
még group by-old a külső select-et névre és telefonszámra, és az id-t MIN()-eld.
ezt mentsd el egy temp táblába, majd a temp táblához join-old be a partner táblát, név és telefonszám alapján + temp.ID <> partner.ID
így meglesz egy rekordban a duplikált partner régi és új id-ja, ezzel már könnyen meg tudod írni az update-t, hogy a kölcsönzés táblában mit mire kell cserélni.
+ én még a partner táblát bővíteném egy oszloppal, hogy törölt / archív, és a régi id-ek megjelölném, így később ki lehet őket szűrni. -
Apollo17hu
őstag
Szeretném megcsinálni azt, hogy vannak partnereink akik sajnos valami folytán kétszer kerültek be az adatbázisunkba és szeretném a kölcsönzéseiket összevonni az újabb regisztrációba.
Név és telefonszám alapján le is tudom kérdezni a listát ahol látom az összes duplikációt.
A lényeg az lenne, hogy a régebbi partnerhez tartozó kölcsönzéseket átrakjam az új partnerre.
A kölcsönzések tábla tartalmazza természetesen a partnerid-t, így ott kellene valahogy kicserélnem a régi az újra.Itt e lekérdezés a duplikációkra itt szépen látom az id-t, a nevet és a telefonszámot.
SELECT
y.id,y.nev, y.Kapcsolat
FROM Partnerek y
INNER JOIN (SELECT
nev, kapcsolat, COUNT(*) AS CountOf
FROM Partnerek
GROUP BY nev, Kapcsolat
HAVING COUNT(*)>1
) dt ON y.kapcsolat=dt.kapcsolat order by Kapcsolat
[kép]En felvennek egy segedmezot, ami a "vegleges" azonositot tartalmazna. Idokozonkent befrissitenem. Az elv az lenne, hogy a duplikatumokckozul azoknal, amelyekre nincs szukseg, feltoltod.
-
Kommy
veterán
Szeretném megcsinálni azt, hogy vannak partnereink akik sajnos valami folytán kétszer kerültek be az adatbázisunkba és szeretném a kölcsönzéseiket összevonni az újabb regisztrációba.
Név és telefonszám alapján le is tudom kérdezni a listát ahol látom az összes duplikációt.
A lényeg az lenne, hogy a régebbi partnerhez tartozó kölcsönzéseket átrakjam az új partnerre.
A kölcsönzések tábla tartalmazza természetesen a partnerid-t, így ott kellene valahogy kicserélnem a régi az újra.Itt e lekérdezés a duplikációkra itt szépen látom az id-t, a nevet és a telefonszámot.
SELECT
y.id,y.nev, y.Kapcsolat
FROM Partnerek y
INNER JOIN (SELECT
nev, kapcsolat, COUNT(*) AS CountOf
FROM Partnerek
GROUP BY nev, Kapcsolat
HAVING COUNT(*)>1
) dt ON y.kapcsolat=dt.kapcsolat order by Kapcsolat
[kép] -
Louro
őstag
Amúgy csak megérteni szeretnéd, vagy átírni?
(Kis csiszolgatás után) beraktam beraktam sqlfiddle-be a mintádat, de nem sok értelmeset produkált: (null),1,...6-ig hozta az összes ID-t
Ha esetleg szeretnél hierarchiát építeni SQL Serverben arra ott a rekurzív CTE
Köszi mindkettőtöknek! Amúgy oracle-re fordítás a cél, de értelmezni se ártana. A join jogos. Siettem. Full outer a nyerő.
-
tm5
tag
Sziasztok!
Bár ritkán adom fel, de ez most kifogott rajtam és a Google se segített.
Alap: SQL Server
Minta:CREATE TABLE t1 AS (id int,name varchar,dependency int);INSERT INTO t1 VALUES (1,'n1',0);INSERT INTO t1 VALUES (2,'n2',1);INSERT INTO t1 VALUES (3,'n3',1);INSERT INTO t1 VALUES (4,'n4',2);INSERT INTO t1 VALUES (5,'n5',3);INSERT INTO t1 VALUES (6,'n6',3);SELECT DISTINCT ca.idFROM t1LEFT JOIN t1 AS t2 ON t2.ID = t1.dependencyLEFT JOIN t1 AS t3 ON t3.ID = t2.dependencyCROSS APPLY (SELECT t1.ID UNION ALLSELECT t2.ID UNION ALLSELECT t3.ID ) AS c (id);A nagy kérdés, hogy én komfortosabb vagyok a JOIN-okkal, mint az APPLY-okkal. Ezt bevallom értelmezni se tudom. Az megvan, hogy egy hierarchiát épít, de a CROSS APPLY esetén a (id) kicsit fura, mert melyik ID-val köti össze a CROSS APPLY-ban lévő ID-t? Vagy duplikálna? A kód szerzője ismeretlen

Valami ilyesmi lenne?
SELECT DISTINCT ca.idFROM t1LEFT JOIN t1 AS t2 ON t2.ID = t1.dependencyLEFT JOIN t1 AS t3 ON t3.ID = t2.dependencyLEFT JOIN (SELECT t1.ID UNION ALLSELECT t2.ID UNION ALLSELECT t3.ID ) AS c ON t1.ID = c.ID OR t2.ID = c.ID OR t3.ID;Amúgy csak megérteni szeretnéd, vagy átírni?
(Kis csiszolgatás után) beraktam beraktam sqlfiddle-be a mintádat, de nem sok értelmeset produkált: (null),1,...6-ig hozta az összes ID-t
Ha esetleg szeretnél hierarchiát építeni SQL Serverben arra ott a rekurzív CTE
-
martonx
veterán
Sziasztok!
Bár ritkán adom fel, de ez most kifogott rajtam és a Google se segített.
Alap: SQL Server
Minta:CREATE TABLE t1 AS (id int,name varchar,dependency int);INSERT INTO t1 VALUES (1,'n1',0);INSERT INTO t1 VALUES (2,'n2',1);INSERT INTO t1 VALUES (3,'n3',1);INSERT INTO t1 VALUES (4,'n4',2);INSERT INTO t1 VALUES (5,'n5',3);INSERT INTO t1 VALUES (6,'n6',3);SELECT DISTINCT ca.idFROM t1LEFT JOIN t1 AS t2 ON t2.ID = t1.dependencyLEFT JOIN t1 AS t3 ON t3.ID = t2.dependencyCROSS APPLY (SELECT t1.ID UNION ALLSELECT t2.ID UNION ALLSELECT t3.ID ) AS c (id);A nagy kérdés, hogy én komfortosabb vagyok a JOIN-okkal, mint az APPLY-okkal. Ezt bevallom értelmezni se tudom. Az megvan, hogy egy hierarchiát épít, de a CROSS APPLY esetén a (id) kicsit fura, mert melyik ID-val köti össze a CROSS APPLY-ban lévő ID-t? Vagy duplikálna? A kód szerzője ismeretlen

Valami ilyesmi lenne?
SELECT DISTINCT ca.idFROM t1LEFT JOIN t1 AS t2 ON t2.ID = t1.dependencyLEFT JOIN t1 AS t3 ON t3.ID = t2.dependencyLEFT JOIN (SELECT t1.ID UNION ALLSELECT t2.ID UNION ALLSELECT t3.ID ) AS c ON t1.ID = c.ID OR t2.ID = c.ID OR t3.ID;A Cross Apply-t nem tudod Joinra fordítani, talán leginkább a FULL OUTER JOIN hasonlít hozzá. Ebben az esetben duplikálni fog.
-
Louro
őstag
Sziasztok!
Bár ritkán adom fel, de ez most kifogott rajtam és a Google se segített.
Alap: SQL Server
Minta:CREATE TABLE t1 AS (id int,name varchar,dependency int);INSERT INTO t1 VALUES (1,'n1',0);INSERT INTO t1 VALUES (2,'n2',1);INSERT INTO t1 VALUES (3,'n3',1);INSERT INTO t1 VALUES (4,'n4',2);INSERT INTO t1 VALUES (5,'n5',3);INSERT INTO t1 VALUES (6,'n6',3);SELECT DISTINCT ca.idFROM t1LEFT JOIN t1 AS t2 ON t2.ID = t1.dependencyLEFT JOIN t1 AS t3 ON t3.ID = t2.dependencyCROSS APPLY (SELECT t1.ID UNION ALLSELECT t2.ID UNION ALLSELECT t3.ID ) AS c (id);A nagy kérdés, hogy én komfortosabb vagyok a JOIN-okkal, mint az APPLY-okkal. Ezt bevallom értelmezni se tudom. Az megvan, hogy egy hierarchiát épít, de a CROSS APPLY esetén a (id) kicsit fura, mert melyik ID-val köti össze a CROSS APPLY-ban lévő ID-t? Vagy duplikálna? A kód szerzője ismeretlen

Valami ilyesmi lenne?
SELECT DISTINCT ca.idFROM t1LEFT JOIN t1 AS t2 ON t2.ID = t1.dependencyLEFT JOIN t1 AS t3 ON t3.ID = t2.dependencyLEFT JOIN (SELECT t1.ID UNION ALLSELECT t2.ID UNION ALLSELECT t3.ID ) AS c ON t1.ID = c.ID OR t2.ID = c.ID OR t3.ID; -
nyunyu
félisten
-
nyunyu
félisten
Unió az VAGYlagos kapcsolatot jelent, ÉS meg metszetet.
Neked az kell, hogy egyik regexpnek sem felel meg, azaz -regexp1 ÉS - regexp2 ÉS -regexp3... (komplementerek/negáltak metszete!)
Ezt ha levezeted, akkor azzal egyenlő, hogy -(regexp1 VAGY regexp2 VAGY regexp3...) (unió komplementere/negáltja!)Mivel a táblák sorai között mindig VAGYlagos kapcsolat van (tábla a sorainak uniója!), így ez utóbbi azt jelenti, hogy az érték nincs a regexp tábládban.
A táblából meg úgy kapjuk meg a B-ben nem szereplő értékeket, hogy LEFT JOIN ... IS NULL. -
nyunyu
félisten
mindig jó ötlet az adatbáziskezelőn belül tartani a melót.
tehát ha meg tudod úgy oldani a programot, hogy ne kelljen kihúzgálni az adatot az sql szerverből, akkor az jobb.ezzel szemben van az, hogy jelen esetben is elszállhat a memóriaigény.
legegyszerűbb kipróbálni és megmérni a lehetséges verziókat.
nálad probléma lehet, hogy ebben a megoldásban a regexp rámegy azokra a sorokra is, amiket egy korábbi regexp már kizárt, ami elég nagy pazarlás. tehát ha külső nyelvből csinálnád a keresést, akkor lehet, hogy egyszerűbb lenne úgy, hogy csinálsz egy temporális táblát, abba belerakod az összes adat azonosítóját, amit az első regexppel szűrtél és még kell, majd utána a többivel sorban kiszórod belőle azt, ami nem kell. ha a regexpeket gyakoriság szerinti csökkenő sorrendben teszteled, akkor az hatékonyabb lesz.
Ezzel viszont vissza is kanyarodtunk a kurzoron végigiterálós megoldáshoz, amit macerásabb megírni, mint az előbbi jólfésült selectet

nagy vonalakban valami ilyesmi:
declare
cursor c is
select regexp
from regexptabla
order by gyakorisag desc;
r varchar2(100);
begin
truncate temptabla;
open c
loop
fetch c into r;
exit when c%NOTFOUND;
insert into temptabla (voltmar)
select e.ertek
from eredetitabla e
left join temptabla t
on e.ertek = t.voltmar
where t.voltmar is null
and e.ertek ~ r;
end loop;
close c;
select e.ertek
from eredetitabla e
left join temptabla t
on e.ertek = t.voltmar
where t.voltmar is null;
end;(Nem vágom a postgre szintaxisát.)
-
bambano
titán
mindig jó ötlet az adatbáziskezelőn belül tartani a melót.
tehát ha meg tudod úgy oldani a programot, hogy ne kelljen kihúzgálni az adatot az sql szerverből, akkor az jobb.ezzel szemben van az, hogy jelen esetben is elszállhat a memóriaigény.
legegyszerűbb kipróbálni és megmérni a lehetséges verziókat.
nálad probléma lehet, hogy ebben a megoldásban a regexp rámegy azokra a sorokra is, amiket egy korábbi regexp már kizárt, ami elég nagy pazarlás. tehát ha külső nyelvből csinálnád a keresést, akkor lehet, hogy egyszerűbb lenne úgy, hogy csinálsz egy temporális táblát, abba belerakod az összes adat azonosítóját, amit az első regexppel szűrtél és még kell, majd utána a többivel sorban kiszórod belőle azt, ami nem kell. ha a regexpeket gyakoriság szerinti csökkenő sorrendben teszteled, akkor az hatékonyabb lesz.
-
nyunyu
félisten
Jó lesz az, csak halmazokban kéne gondolkozni.
Neked a regexp kifejezések uniójának negáltja kell, nem a negált regexpek uniója!Vagyis left join on keresendo ~ regexp... where regexp is null.
bambano megoldását szabvány join szintaxisra átírva:
select keresendo
from keresendotabla
left join regexptabla
on keresendo ~ regexposzlop
where regexposzlop is null; -
nyunyu
félisten
Hmm, így joinra nem gondoltam, jó ötlet.
Más kérdés a sebesség, regexp valószínűleg sehogy sem hasít.

-
bambano
titán
természetesen tud.
azért arra készülj fel lélekben, hogyha csinálsz egy nagyobbacska táblára full joint egy párszáz regexpes táblával, attól szédülni fog a cucc
át.select keresendo from keresendotabla,regexptabla where keresendo ~ regexposzlop; -
nyunyu
félisten
Dokumentációja szerint a Postgre SIMILAR TO/NOT SIMILAR TO/~/~* operátoroknak egy patternt lehet megadni.
Úgyhogy nem úszod meg tárolt eljárás nélkül:
Kurzorba teszed a pattern lista tartalmát.
Végigiterálsz a kurzoron, minden egyes lépésnél egy ideiglenes táblába leválogatod az eredeti táblából az aktuális patternre illeszkedő értékeket.
Végén meg egy jól irányzott left joinnal kiválogatod az eredeti táblából azokat az értékeket, amik a másodikban NEM szerepelnek. -
Micsurin
nagyúr
Köszönöm a sok segítséget az elmúlt hetekben, nagyon jól jött!
Első ZH-n anno megrántottak mert lehalt a vmware, na úgy néz ki nem ,hogy a bukás széléről kikapartam a tárgyat de 3-astól rosszabb nem igen lehetek már akkor se ha az elméleti ZH-t lenullázom.
-
tm5
tag
-
Micsurin
nagyúr
...valamiért magától észhez tért nem tudom miért. Újraraktam a virtuális gépet most jó.
A sor szintű trigger az a
for each rowugye?
Ha tábla szintű triggert írtak még nekünk ott a költő mire gondolt? statement trigger-re? -
kw3v865
senior tag
-
Micsurin
nagyúr
select *
from dba_tables
where table_name='MOTOROK'; és végig próbálgatva is ORA-00942 lesz az az: a tábla vagy a nézet nem létezik.Pedig nulláról kezdtem:
Új kapcsolat Hr-be belépve, létrehoz és feltölt.
Kapcsolódtam a SYS as SYSDBA-ra megadtam az ALL PRIVILEGES-t a Hr-nek.
Létrehoztam a usereket és a role-okat, de semmi változás a dba_tables-re sem lehet lekérdezni.
-
nyunyu
félisten
hr alól lettek létrehozva a táblák és ott is lett a GRANT kiadva mivel megkötés volt, hogy ne lehessen jogot tovább adni.
De nem akarja az igazságot annyira nem, hogy disconnect majd connect ismét hr-rel átraktam mindent ANY-re, hát nem igazán hatotta meg a dolog mert továbbra sem léteznek a tábláim.

edit.: ezt a DBA-t mindjárt megnézem csak nulláztam a vmwaret inkább berakok minden kódot újra mert kezdtem kuszálni már.
Akkor kérdezd le:
select *
from dba_tables
where table_name='CSUPANAGYBETU';(Oracle nagybetűsen tárolja a DB objektumok neveit.)
-
Micsurin
nagyúr
GRANTolni csak az tud, akié a tábla, vagy kapott rá GRANTolási jogot, vagy DBA júzer.
Akinek csak olvasási/írási joga van, az nem tudja azokat továbbadni!Ha hr séma/júzer alatt hoztad létre a táblákat, akkor hr júzerrel kell kiadni a GRANTokat.
Utána a többi júzer select * from hr.táblanév;-vel fogja elérni őket.
Egyébként a táblák listája nyilvános, bárki lekérheti a select * from dba_tables;-t.
Ha a select * from all_tables;-t kérdezed, ott csak azokat mutatja az Oracle, amikhez az aktuális júzernek joga is van.hr alól lettek létrehozva a táblák és ott is lett a GRANT kiadva mivel megkötés volt, hogy ne lehessen jogot tovább adni.
De nem akarja az igazságot annyira nem, hogy disconnect majd connect ismét hr-rel átraktam mindent ANY-re, hát nem igazán hatotta meg a dolog mert továbbra sem léteznek a tábláim.

edit.: ezt a DBA-t mindjárt megnézem csak nulláztam a vmwaret inkább berakok minden kódot újra mert kezdtem kuszálni már.
-
nyunyu
félisten
GRANTolni csak az tud, akié a tábla, vagy kapott rá GRANTolási jogot, vagy DBA júzer.
Akinek csak olvasási/írási joga van, az nem tudja azokat továbbadni!Ha hr séma/júzer alatt hoztad létre a táblákat, akkor hr júzerrel kell kiadni a GRANTokat.
Utána a többi júzer select * from hr.táblanév;-vel fogja elérni őket.
Egyébként a táblák listája nyilvános, bárki lekérheti a select * from dba_tables;-t.
Ha a select * from all_tables;-t kérdezed, ott csak azokat mutatja az Oracle, amikhez az aktuális júzernek joga is van. -
Micsurin
nagyúr
Köszönöm a válaszokat!
Még annyi kérdésem lenne(
), hogy ha adtam SESSION létrehozáshoz is jogos egy usernek, miért nem látja az adott séma tábláit?
Elméletileg pedig kéne lássa nem?
CREATE ROLE raktáros IDENTIFIED BY r123;CREATE ROLE eladó IDENTIFIED BY e123;CREATE ROLE üzletvezető IDENTIFIED BY ü123;CREATE USER Zolika IDENTIFIED BY z123;GRANT UNLIMITED TABLESPACE TO Zolika;CREATE USER Toma IDENTIFIED BY t123;GRANT UNLIMITED TABLESPACE TO Toma;CREATE USER Csilla IDENTIFIED BY c123;GRANT UNLIMITED TABLESPACE TO Csilla;GRANT CREATE SESSION TO Toma;GRANT CREATE SESSION TO Csilla;GRANT CREATE SESSION TO Zolika;GRANT SELECT, INSERT, UPDATE, DELETE ON kereskedes TO eladó;GRANT SELECT, INSERT, UPDATE, DELETE ON motorok TO eladó;GRANT SELECT, INSERT, UPDATE, DELETE ON kiegeszitok TO eladó;GRANT SELECT, INSERT, UPDATE, DELETE ON adasvetel TO eladó;GRANT ALL PRIVILEGES TO raktáros;GRANT SELECT ON kereskedes TO üzletvezető;GRANT SELECT ON adasvetel TO üzletvezető;GRANT SELECT ON motorok TO üzletvezető;GRANT SELECT ON kiegeszitok TO üzletvezető;GRANT SELECT ON maganszemely TO üzletvezető;GRANT raktáros TO Zolika;GRANT eladó TO Csilla;GRANT üzletvezető TO Toma;Ha jól értem most a táblák a hr user alatt "maradtak" mert ott hoztam létre ergo meg kell nevezzem a hr.-rel őket ha nem akarok ANY-vel teljes database wide jogot adni?
Így sem "léteznek" a tábláim.
-
Micsurin
nagyúr
Köszönöm a válaszokat!
Még annyi kérdésem lenne(
), hogy ha adtam SESSION létrehozáshoz is jogos egy usernek, miért nem látja az adott séma tábláit?
Elméletileg pedig kéne lássa nem?
CREATE ROLE raktáros IDENTIFIED BY r123;CREATE ROLE eladó IDENTIFIED BY e123;CREATE ROLE üzletvezető IDENTIFIED BY ü123;CREATE USER Zolika IDENTIFIED BY z123;GRANT UNLIMITED TABLESPACE TO Zolika;CREATE USER Toma IDENTIFIED BY t123;GRANT UNLIMITED TABLESPACE TO Toma;CREATE USER Csilla IDENTIFIED BY c123;GRANT UNLIMITED TABLESPACE TO Csilla;GRANT CREATE SESSION TO Toma;GRANT CREATE SESSION TO Csilla;GRANT CREATE SESSION TO Zolika;GRANT SELECT, INSERT, UPDATE, DELETE ON kereskedes TO eladó;GRANT SELECT, INSERT, UPDATE, DELETE ON motorok TO eladó;GRANT SELECT, INSERT, UPDATE, DELETE ON kiegeszitok TO eladó;GRANT SELECT, INSERT, UPDATE, DELETE ON adasvetel TO eladó;GRANT ALL PRIVILEGES TO raktáros;GRANT SELECT ON kereskedes TO üzletvezető;GRANT SELECT ON adasvetel TO üzletvezető;GRANT SELECT ON motorok TO üzletvezető;GRANT SELECT ON kiegeszitok TO üzletvezető;GRANT SELECT ON maganszemely TO üzletvezető;GRANT raktáros TO Zolika;GRANT eladó TO Csilla;GRANT üzletvezető TO Toma; -
Petya25
őstag
A sys.objects-ben megtalálsz minden user által létrehozott objektumot. A sys.system_objects-ben a system által létrehozott és a sys.all_objects-ben pedig mindekettőt.
Ahogy a leírásban is benne van a különböző objektumok nevét megkaphatod az OBJECT_NAME függvény segítségével.Szűrsz a neked szükséges típusokra és meg is vagy.
Köszönöm, összeszedtem ami kellett.
-
nyunyu
félisten
Még annyit érdemes tudni a többiek által leírtakon túl, hogy van egy TRUNCATE TABLE parancs, ami ugyanúgy kitöröl mindent egy táblából mint a DELETE parancs, csak DDL utasításként viselkedik, tehát azonnal végrehajtódik és nem is lehet rollback-elni. A DELETE-et a tranzakción belül még igen. Cserébe villámgyors. A DELETE az sok rekordra nagyon lassú tud lenni.
Persze hogy lassú a DELETE, mert az törlendő soronként módosítja az indexeket, hívogatja a triggereket, plusz vezeti az undo logot.
TRUNCATE meg egy lépésben mindent legyalul a francba, és nem is logol sehova.
-
martonx
veterán
Még annyit érdemes tudni a többiek által leírtakon túl, hogy van egy TRUNCATE TABLE parancs, ami ugyanúgy kitöröl mindent egy táblából mint a DELETE parancs, csak DDL utasításként viselkedik, tehát azonnal végrehajtódik és nem is lehet rollback-elni. A DELETE-et a tranzakción belül még igen. Cserébe villámgyors. A DELETE az sok rekordra nagyon lassú tud lenni.
Illetve a truncate alapállapotba hozza a táblához tartozó indexeket, incrementeket is. Delete meg tényleg csak az adatot törli.
-
tm5
tag
Köszönöm!
Életmentő volt holnap lesz csak órai téma de így végre letudom adni a félévest teljesen befejezve és nem kell már vele szórakozzak a héten, legalább ezzel kevesebb!
Keresgéltem de stackover után sem esett le teljesen a dolog pedig tényleg egyszerű...
Érdekes mindig ezekkel az egyszerűbb cuccokkal szenvedek, a tárolj eljárásos, függvényes triggeres téma valahogy jobban feküdt de sanszos, hogy a prog miatt.
Még annyit érdemes tudni a többiek által leírtakon túl, hogy van egy TRUNCATE TABLE parancs, ami ugyanúgy kitöröl mindent egy táblából mint a DELETE parancs, csak DDL utasításként viselkedik, tehát azonnal végrehajtódik és nem is lehet rollback-elni. A DELETE-et a tranzakción belül még igen. Cserébe villámgyors. A DELETE az sok rekordra nagyon lassú tud lenni.
-
Micsurin
nagyúr
Egy tranzakcióban futó adatmanipulációs (DML) utasítások (insert, update, merge, delete...) hatását csak az őket futtató DB session látja, amíg a tranzakció nincs commitálva.
Mittudomén, van egy táblád, amiben van 10 rekord.
Nyitsz egy adatbáziskezelő ablakot, amiben kiadsz 5 insertet, meg 3 updateet, majd kiadsz egy select count(*) from tabla;-t, akkor az ott 15-öt fog mutatni.
Közben nyitsz egy másik ablakot, egy ott kiadott select * from tabla; az eredeti állapotot, 10 rekordot fog mutatni, a még nyitva lévő tranzakcióban hozzáadott ötöt, meg az updateek hatását nem!
Ha az első ablakban kiadsz egy commit;-ot (amivel véglegesíted az addig nyitott tranzakcióban futtatott DML utasítások hatását és lezárod a tranzakciót), akkor a második ablakbeli select *-ot újrafuttatva már 15, módosult rekord fog megjelenni.
Ha az első ablakban commit; helyett rollback;-et nyomsz, akkor teljesen eldobódik a nyitott tranzakcióban futtatott DMLek hatása, és visszaáll az eredeti állapotra.
Tehát ha utána kiadnál egy select *-ot, akkor ugyanazt a 10 eredeti rekordot látnád az első ablakban is, mint korábban a kettes ablakban.Adatdefiníciós (DDL) utasítások (pl. tábla létrehozás, eldobás, oszlop hozzáadás, index létrehozás...) mindig önálló tranzakcióban futnak és azonnal commitálódnak, így azok nem vonhatóak vissza kiadás után.
Meg ha jól rémlik, akkor az adott DB sessionben még függőben lévő tranzakciót is commitálják!Savepointokat még nem használtam, de ahogy olvasom arra jó, hogy rollbacknél meg lehessen mondani, hogy ne az egész addigi tranzakciót dobja el, hanem csak a savepoint után futtatott utasításokat.
Lehet, hogy valakik szerint ez jó ötlet, de alapvetően sérti a tranzakciók atomiságát, és jóval nehezebb egy félig lefutott tranzakció által elcseszett adatokat javítani, mint ha eldobnád az egészet a francba, és javítás után elölről újrafuttatnád az egészet.
Köszönöm!
Életmentő volt holnap lesz csak órai téma de így végre letudom adni a félévest teljesen befejezve és nem kell már vele szórakozzak a héten, legalább ezzel kevesebb!
Keresgéltem de stackover után sem esett le teljesen a dolog pedig tényleg egyszerű...
Érdekes mindig ezekkel az egyszerűbb cuccokkal szenvedek, a tárolj eljárásos, függvényes triggeres téma valahogy jobban feküdt de sanszos, hogy a prog miatt.
-
DS39
nagyúr
köszi, ezt nem tudtam, hasznos infó.

-
nyunyu
félisten
MS SQL-nél begin tran-nal együtt kell futtatni az update-t, hogy rollback-elhető legyen.
Nem lehet az SSMS beállításainál kikapcsolni az autocommitot?
De, pirosat be kell pipálni, mert nem az a default:

Ezután nem fogja automatikusan commitálni a kiadott utasításokat.
-
nyunyu
félisten
MS SQL-nél begin tran-nal együtt kell futtatni az update-t, hogy rollback-elhető legyen.
Nem lehet az SSMS beállításainál kikapcsolni az autocommitot?
De, pirosat be kell pipálni, mert nem az a default:

-
DS39
nagyúr
-
nyunyu
félisten
Egy tranzakcióban futó adatmanipulációs (DML) utasítások (insert, update, merge, delete...) hatását csak az őket futtató DB session látja, amíg a tranzakció nincs commitálva.
Mittudomén, van egy táblád, amiben van 10 rekord.
Nyitsz egy adatbáziskezelő ablakot, amiben kiadsz 5 insertet, meg 3 updateet, majd kiadsz egy select count(*) from tabla;-t, akkor az ott 15-öt fog mutatni.
Közben nyitsz egy másik ablakot, egy ott kiadott select * from tabla; az eredeti állapotot, 10 rekordot fog mutatni, a még nyitva lévő tranzakcióban hozzáadott ötöt, meg az updateek hatását nem!
Ha az első ablakban kiadsz egy commit;-ot (amivel véglegesíted az addig nyitott tranzakcióban futtatott DML utasítások hatását és lezárod a tranzakciót), akkor a második ablakbeli select *-ot újrafuttatva már 15, módosult rekord fog megjelenni.
Ha az első ablakban commit; helyett rollback;-et nyomsz, akkor teljesen eldobódik a nyitott tranzakcióban futtatott DMLek hatása, és visszaáll az eredeti állapotra.
Tehát ha utána kiadnál egy select *-ot, akkor ugyanazt a 10 eredeti rekordot látnád az első ablakban is, mint korábban a kettes ablakban.Adatdefiníciós (DDL) utasítások (pl. tábla létrehozás, eldobás, oszlop hozzáadás, index létrehozás...) mindig önálló tranzakcióban futnak és azonnal commitálódnak, így azok nem vonhatóak vissza kiadás után.
Meg ha jól rémlik, akkor az adott DB sessionben még függőben lévő tranzakciót is commitálják!Savepointokat még nem használtam, de ahogy olvasom arra jó, hogy rollbacknél meg lehessen mondani, hogy ne az egész addigi tranzakciót dobja el, hanem csak a savepoint után futtatott utasításokat.
Lehet, hogy valakik szerint ez jó ötlet, de alapvetően sérti a tranzakciók atomiságát, és jóval nehezebb egy félig lefutott tranzakció által elcseszett adatokat javítani, mint ha eldobnád az egészet a francba, és javítás után elölről újrafuttatnád az egészet.
-
Micsurin
nagyúr
-
DS39
nagyúr
milyen sql?
MS SQL-nél begin tran-nal együtt kell futtatni az update-t, hogy rollback-elhető legyen. -
Micsurin
nagyúr
Rollback, commit, savepointmiképp működik?Parancs alá írom vagy után mint egy új parancsot és együtt futtatom? Elolvastam a dokumentációt de most nem volt onnan világos a parancs működése.
Commitgyakorlatilag mindenki számára láthatóvá teszi a változást pl egyUPDATEesetén? -
disy68
aktív tag
A sys.objects-ben megtalálsz minden user által létrehozott objektumot. A sys.system_objects-ben a system által létrehozott és a sys.all_objects-ben pedig mindekettőt.
Ahogy a leírásban is benne van a különböző objektumok nevét megkaphatod az OBJECT_NAME függvény segítségével.Szűrsz a neked szükséges típusokra és meg is vagy.
-
Petya25
őstag
MS SQL-ben kellene a táblákat és megírt nézet/függvény/SP-kel kilistáznom hogy a készítés dátuma is rajta legyen?
Valami tipp?Táblákra van egy ilyenem:
SELECT SCHEMA_NAME(schema_id) AS schema_name, name AS table_name, create_date
FROM sys.tables
ORDER BY schema_name, table_name -
bambano
titán
fogalmam sincs, mit csinál windows alatt.
nem csak a shared_buffer számít, a prepared statementeknek meg a connectionöknek is foglal memóriát, illetve van egy work_mem változó, azokat is érdemes csökkenteni.
Új hozzászólás Aktív témák
-
4900 - 4801
6041 - 6001 6000 - 5901 5900 - 5801 5800 - 5701 5700 - 5601 5600 - 5501 5500 - 5401 5400 - 5301 5300 - 5201 5200 - 5101 5100 - 5001 5000 - 4901 4900 - 4801 4800 - 4701 4700 - 4601 4600 - 4501 4500 - 4401 4400 - 4301 4300 - 4201 4200 - 4101 4100 - 4001 4000 - 3901 3900 - 3801 3800 - 3701 3700 - 3601 3600 - 3501 3500 - 3401 3400 - 3301 3300 - 3201 3200 - 3101 3100 - 3001 3000 - 2901 2900 - 2801 2800 - 2701 2700 - 2601 2600 - 2501 2500 - 2401 2400 - 2301 2300 - 2201 2200 - 2101 2100 - 2001 2000 - 1
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Tabletek, E-bookok Nyomtatók, szkennerek PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
- Fórumok
- Szoftverfejlesztés
- SQL kérdések
- (kiemelt téma)
- Xbox Series X|S
- Óra topik
- PlayStation 5
- Android alkalmazások - szoftver kibeszélő topik
- Milyen egeret válasszak?
- Marxistává válik az AI, ha elviselhetetlenné teszik a munkakörülményeit
- Intel Dual Core 2000 felhasználók barátságos offolós topikja
- Huawei Watch Fit 5 Pro - jó forma
- Fotók, videók mobillal
- Samsung Galaxy Watch8 és Watch8 Classic – lelkes hiperaktivitás
- További aktív témák...
- playseat evolution black actifit
- Precision 3560 27% 15.6" FHD IPS i7-1165G7 T500 16GB 512GB NVMe magyar vbill IR kam gar
- Gamer Gép - MSI H610, Intel I5 13600, 16GB DDR4, RTX 3070 Ti, 1TB M.2 SSD, 750W 80+ Gold
- Asztali PC i7 6700 1650 16GB DDR4 512GB SSD
- ASUS TUF Gaming A17 Gamer laptop , R7 6800H , 16GB DDR5 , RTX 3050 Ti
- 27% - GIGABYTE GeForce RTX 5070 Ti GAMING OC 16GB GDDR7 Videokártya!
- Honor Magic5 Lite / 8/256GB / Kártyafüggetlen / 12Hó Garancia
- BESZÁMÍTÁS! Sony PlayStation 4 PRO 1TB fekete játékkonzol extra játákok garanciával hibátlan működés
- AKCIÓ! AMD Ryzen 7 5800X3D 8 mag 16 szál processzor garanciával hibátlan működéssel
- Keresek - Chieftec hdd tartó sínt.
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest



