Új hozzászólás Aktív témák
-
bpx
őstag
válasz dellfanboy #794 üzenetére
az nem parancs, hanem hint
select /*+ USE_HASH(t1 t2) */ t1.oszlop1, t2.oszlop2, ... from sema1.tabla1 t1, sema2.tabla2 t2
where t1.id = t2.id;Oracle-ben az optimalizálót úgynevezett "hint"-ekkel lehet befolyásolni, hogy milyen végrehajtási tervet készítsen
a fenti példában mindenképp HASH JOIN-t fog használni a többi lehetőség (NESTED LOOPS, MERGE JOIN) helyett
az is látszik ugye, hogy kommentben van, nem parancs - ha hülyeséget írsz bele, egyszerűen figyelmen kívül hagyja
rengeteg ilyen hint van, olyan is, ami dokumentálva sincsnem jó gyakorlat eleve ezekkel megírni egy utasítást, alapvetően ezek nélkül lenne jó megoldani mindent
én Oracle DBA-ként dolgozom, amikor valamelyik cégtől szólnak a fejlesztők, hogy lassú valamelyik SQL, akkor szoktuk hangolni, és hinteket használni ha szükséges[ Szerkesztve ]
-
ArchElf
addikt
válasz dellfanboy #1185 üzenetére
Nem a where 1=1 -et kell törölni, hanem az 1=1 AND-et
SELECT *
FROM táblanév
WHERE upper(g.NAME) LIKE '%lajos%';AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
Sk8erPeter
nagyúr
válasz dellfanboy #1185 üzenetére
Igazából szerintem így lenne értelme:
...
WHERE UPPER( stuff_name ) LIKE UPPER( '%lajos%' )...abban az esetben, ha az adatbázis case sensitive.
Pl. MySQL-nél alapból tök mindegy, hogy "lajos", "LAJOS" vagy "LaJoS" a tárolt név, simán az UPPER nélkül is kiadja mindegyik találatot, szóval ez case insensitive módon megtalálja az összeset - de collationnel arra is van mód, hogy ne így legyen: [link].Case sensitive esetben viszont mindkettőt jó, ha nagybetűssé teszed, és úgy veted össze, mert ellenkező esetben nem mindegy, hogy a fent felsorolt példák közül hogyan keresel rá.
Tehát ha nem mindkettőnek a nagybetűssé (vagy épp kisbetűssé) tett változatát veted össze, akkor lehet, hogy egyes találatokat kizársz az eredményekből, mert mondjuk valaki elgépelte a Lajost, és LajOst írt helyette (lásd nagy O).
A nagybetűssé tett "lajos"-ból "LAJOS" lesz, a nagybetűssé tett "LajOs"-ból is "LAJOS" lesz, tehát így már a két karaktersorozat egyezni fog ebben az 5 karakterben.
A Te fenti keresésed lehetővé teszi azt is, hogy a "LajOska" nevet is megtalálja.Remélem így valamennyire érthető.
Sk8erPeter
-
Ispy
veterán
válasz dellfanboy #1793 üzenetére
Ezt nem is értem
"Debugging is like being the detective in a crime movie where you're also the murderer."
-
DS39
nagyúr
válasz dellfanboy #1795 üzenetére
ez hogy SQL kérdés?
milyen programban kell a jogosultság egy táblához? MS SQL Server, Oracle DB?
ha nem adtak jogosultságot, akkor nem is kell az adott táblával dolgozzál, nem?[ Szerkesztve ]
-
sztanozs
veterán
válasz dellfanboy #1795 üzenetére
Attól még, hogy látja a táblákat, még nem szükségszerűen tud neked bármire is jogot adni (vagy publikus táblákat generálni).
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
válasz dellfanboy #1798 üzenetére
vazz, remélem nem nálunk dolgozol, mert különben hétfőn reggel mind a kettőtöknek egy sün lesz feldugva a végbelébe
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
bambano
titán
válasz dellfanboy #1798 üzenetére
az milyen jó lesz, ha rájönnek, hogy az ő biztonsági előírásaik ellenére meg tudtad oldani a feladatot, és leadtad, ahelyett, hogy szólták volna, hogy akadályozva vagy.
na akkor fognak fejek hullani, sorozatban, a tied csak az első lesz, de nem az egyetlen.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
válasz dellfanboy #1795 üzenetére
Amit te keresel, azt úgy hívják, VIEW. Ha azokkal a táblákkal kellene dolgoznod, kérj egy VIEW-t. Ekkor a VIEW-hoz adnak hozzá, nem a TABLE-hoz SELECT permission-nel.
-
Speeedfire
nagyúr
válasz dellfanboy #1900 üzenetére
Hát, ha másik sémából szeretnél lekérni, akkor csak ennyi kell.
select * from masik_sema.tabla_nev
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
martonx
veterán
válasz dellfanboy #1900 üzenetére
Ez most akkor pontosan milyen SQL is? MSSQL, Oracle, MySQL, PostgreSQL?
És jól értem, hogy első körben egy linked servert szeretnél beállítani? Vagy az már adott?
[ Szerkesztve ]
Én kérek elnézést!
-
bpx
őstag
válasz dellfanboy #1900 üzenetére
"select *from tábla_xxxxxx"
igen, rosszul irtad
@ kell _ helyettselect *from tábla@aaaaaa
+ a dblink neve aaaaaa, mivel az xxxxxx az a TNS nev a mintad alapjan
[ Szerkesztve ]
-
Apollo17hu
őstag
válasz dellfanboy #1911 üzenetére
Nekem is volt szerencsém mindkettőhöz.
Az SQL Developer-t egyetemen fél évig használtuk. Arra jó volt, hogy fogalmat kapjunk a relációs adatbázisokról, a többfelhasználós környezetről, és alap SQL utasításokat is írtunk. Sajnos nem tudom, ennél mennyivel tudhat többet a program, de azt külön hangsúlyozta a szemináriumvezetőnk, hogy azért az SQL Developerre esett a tanszék választása, mert teljesen ingyenes.
Munkám során pedig PL/SQL Developert használok, és bár a "PL" funkcionalitást szinte egyáltalán nem használom ki, sokkal profibbnak tűnik, bővebb funkcionalitással (pl. automatikus kódkiegészítések). (Ez lehet, hogy azért is van, mert 3 év alatt volt időm megismerkedni vele.) Ő ugye fizetős...
-
Speeedfire
nagyúr
válasz dellfanboy #1911 üzenetére
Sql developert nem nagyon szeretem, inkább toad vagy plsql developer.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
martonx
veterán
válasz dellfanboy #1973 üzenetére
ezzel nem leszel kisegítve, de az adattisztítás mindig az egyik legnagyobb szopás. Regexp-el esetleg ki lehetne szedni a fixen 4 jegyű számokat -> irányítószám.
Én kérek elnézést!
-
bpx
őstag
válasz dellfanboy #2012 üzenetére
create database link B connect to user identified by pw using 'A';
select * from tabla@B; -
Ablakos
őstag
válasz dellfanboy #2218 üzenetére
A distinct nem számol, hanem a mögötte álló oszlop(ok)ból egyedi értékeket képez.
select count(distinct oszlopnév ) from táblanév; egyedi értékek számossága -
bpx
őstag
válasz dellfanboy #2333 üzenetére
where oszlop between to_date('2014-01-01', 'YYYY-MM-DD') and to_date('2014-02-01', 'YYYY-MM-DD')
-
Ablakos
őstag
válasz dellfanboy #2336 üzenetére
Egy beillesztett kód ( eseteleg sql fejlesztői környezet megnevezéssel) biztosan többet mondana annak, aki segíteni szeretne és tud is.
-
bpx
őstag
válasz dellfanboy #2336 üzenetére
amikor futtatsz egy lekérdezést, ahhoz az adatbázis végrehajtási tervet készít, és az optimizer az összes lehetséges tervet megvizsgálja, és azokból választja ki a szerinte optimálisat
ha mondjuk így néz ki az sql (Oracle), hogy:select /*+ ordered use_hash(tabla1 tabla2) */ oszlop1, oszlop2, ... from tabla1, tabla2, tabla3 ...
akkor a /*+ ... */ közti "kommentek" valójában optimizer hintek, amivel befolyásolhatod hogy milyen terv készüljön
az ordered azt jelenti, hogy a tábláknál a join sorrendje az lesz, ahogy le van írva az sql szövegében, és nem az adatbázis dönti el, tehát a fenti példában először veszi a tabla1-et, utána a tabla2-t, majd a tabla3-at
a use_hash meg azt jelenti, hogy a tabla1-nél es tabla2-nél hash joint fog használni (míg a hint nélkül lehet, hogy nested loops join vagy merge join lenne)azt meg, hogy miért jó a fromba beágyazott select, nem tudom
sokszor meg lehet oldani anélkül is, ha viszont kell, akkor meg van sokkal olvashatóbb módszer is: with .. as ..
pl. (persze itt pont nem kell, meg az egyszerűsége miatt nincs is nagy különbség, de most ennyire telik tőlem):select * from ( select * from hr.employees where hire_date > date '2005-01-01') e2005
where e2005.salary > 15000;
with e2005 as (select * from hr.employees where hire_date > date '2005-01-01')
select * from e2005 where e2005.salary > 15000; -
dellfanboy
senior tag
válasz dellfanboy #2351 üzenetére
megvan a plsql-be van lekérdezés készítő a végére kellett még egy where táblanév1.oszlopid=táblanév2oszlopid
de miért??
eladó dolgok:mondd az árát és vidd http://hardverapro.hu/tag/dellfanboy#aprohirdetesei
-
Sk8erPeter
nagyúr
válasz dellfanboy #2352 üzenetére
Megpróbálhatnál esetleg nem úgy írni, mintha rohanva csetelnél, hanem összeszedetten írnád le, mi is a felépítése a tábláknak, és mi is a konkrét probléma, mert össze-vissza használtad a példakódodban a neveket is (most akkor mit joinoltál eredetileg mivel?!), plusz azt sem írtad le, igazából mi a hibaüzenet; egyszer "oszlopnév" nevet adtál a mezőnek, egyszer "oszlop1"-et, aztán "oszlopid"-t, ember legyen a talpán, aki kiigazodik ez alapján, hogy most akkor id-kat kapcsoltál-e össze, vagy mást (is).
Sk8erPeter
-
bambano
titán
válasz dellfanboy #2361 üzenetére
oracle-t nem tudom, de postgresql ugyanígy nevezi, pivot-nak, és betölthető extensionként van benne.
lehet, hogyha rákeresel ugyanerre oracle esetén, ott is lesz.szerk: most látom, ez sima aggregált cucc:
select id, sum(..) from table group by 1 order by 1;[ Szerkesztve ]
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
Apollo17hu
őstag
válasz dellfanboy #2361 üzenetére
Mi nem megy az exportálásban? Ha sok az adat, akkor kicsit "gondolkodni" szokott a Developer, de nekem mindig kirakja, amit ki kell. Ha meg már Excel-ben van, akkor xlsb-ként mentsd el, és akkor kb. akkora lesz a fájlod mérete, mintha zippelted volna.
-
Apollo17hu
őstag
válasz dellfanboy #2366 üzenetére
A meghaladja a 100 MB-ot nem arra vonatkozik véletlenül, hogy nem pörgette ki (fetch) az összes eredménysort? Ilyet szokott nálam is pampogni, de ha teljesen kipörgetem, akkor engedi az exportot. És nem 100 megás Excel-fájlod lesz, hanem töredéke.
Egyébként akkor kapsz ilyen 100 megás üzit, ha a sok rekord baromi sok mezőből áll. Ha csak a legfontosabb mezőket hagyod a lekérdezésedben, akkor sztem még az üzenet sem fog megjelenni.
-
Apollo17hu
őstag
válasz dellfanboy #2369 üzenetére
írok egy selectet megvan az eredmény a plsql behoz kb 20 sort. ekkor szoktam a zöld le nyílra kattintani (ugrás az utolsó oldalra), hogy lehozza a maradékot (és itt néha megakad a 100mb miatt)
Egyrészt be lehet állítani a Developert, hogy ha lefut a lekérdezés, akkor az eredményt automatikusan pörgesse ki (nem ajánlott), másrészt ha 100 MB-nál megakad a kipörgetés, utána ha nyomsz mégegyet a zöld nyílra, akkor kipörgeti a maradékot is, és mehet az export.
A query eredmény exportálása funkciót nem használtam még.
-
Apollo17hu
őstag
válasz dellfanboy #2370 üzenetére
Ez nekem nem jött át. Hogy néz ki a lekérdezésed? LIKE / BETWEEN operátorokat ismered?
-
Apollo17hu
őstag
válasz dellfanboy #2373 üzenetére
Így nehéz segíteni, még mindig nem jött át, hogy pontosan mi a problémád.
Az a gondod, hogy 1000+ soros a lekérdezésed? Mert valami olyasmit csinálsz, hogy WHERE id = 564 or id = 5688 or id = 5212 or id = 213 ...?És az az x db vevő honnan van neked? Hogy szűrted le? Vagy kaptad valahonnan egy Excel-fájlban?
-
bambano
titán
válasz dellfanboy #2370 üzenetére
szerintem subselect
select akarmi from tabla where vevo_id in (select id from vevo where foldrajzilagrendben);
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
PumpkinSeed
addikt
válasz dellfanboy #2377 üzenetére
Attól függ, hogy milyen sql-t használsz. Oracle-ben: select * from user_tables
"Akinek elég bátorsága és türelme van ahhoz, hogy egész életében a sötétségbe nézzen, elsőként fogja meglátni benne a fény felvillanását." - Kán
-
bpx
őstag
válasz dellfanboy #2382 üzenetére
na tehát akkor:
user_tables = saját tábláid
all_tables = olyan táblák, amelyek az aktuális felhasználó számára elérhetőek (amelyek lehetnek sajátjai, vagy másé)
dba_tables = összes tábla az adatbázisbanaz utolsót viszont csak akkor tudod lekérdezni, ha kapsz megfelelő jogosultságot
[ Szerkesztve ]
-
PumpkinSeed
addikt
válasz dellfanboy #2392 üzenetére
Valami kérdés? Vagy csak be szeretnéd mutatni a 3 tábla összekapcsolását?
"Akinek elég bátorsága és türelme van ahhoz, hogy egész életében a sötétségbe nézzen, elsőként fogja meglátni benne a fény felvillanását." - Kán
-
Apollo17hu
őstag
válasz dellfanboy #2394 üzenetére
Amit 2 hsz.-szel korábban írtál, az a 3 tábla metszete. A metszetben lehet szűrni id-ra (= Melyek azok az id-k, amelyek mindhárom táblában megtalálhatóak?), ekkor mindegy, hogy a háromból melyik tábla id-jára szűrsz. Ha több id-ra akarsz szűrni, akkor az IN operátort használd!
megszámolom az oszlopban lévő értékeket de csak akkor ha az id x.
Ezt nem értem. Lehet, hogy az id mellett vannak más mezőid, amiket összegezni szeretnél? Ha így van, akkor lehet, hogy a SUM()-ra is szükséged van.
-
válasz dellfanboy #2507 üzenetére
Be kell töltened egy táblába, és megfelelően join-olni.
-
Apollo17hu
őstag
válasz dellfanboy #2507 üzenetére
Úgy kell csinálnod, ahogy Athlon64+ írta: betöltöd mondjuk egy "ugyfel" nevű táblába, és egyszerűen összekötöd (erősen) azzal a táblával, amiben az azonosítókat szűrni szeretnéd.
Valahogy így:
SELECT alaptabla.*
FROM alaptabla, ugyfel
WHERE alaptabla.id = ugyfel.idEz semmi mást nem csinál, mint az alaptáblából leszűri azokat a rekordokat, amelyek - azonosító alapján - szerepelnek az ugyfel táblában is.
-
rum-cajsz
őstag
válasz dellfanboy #2514 üzenetére
Ha a plsql a PL/SQL Developer nevű programot jelenti, akkor elég hamar találhattál volna választ a súgójában.
Ezt a témát keresd: "Updating the database"De ha sokat csinálsz ilyet, és nem csak egyszeri alkalomról van szó, akkor valószínűleg egyszerűbb lenne a text importer (Tools menü)funkcióját használni a programnak, ami CSV formában eszi meg az excel adataidat.
[ Szerkesztve ]
=Kilroy was here============================ooO=*(_)*=Ooo=======
-
gygabor88
tag
válasz dellfanboy #2560 üzenetére
(SELECT egyik FROM tabla
UNION
SELECT masik FROM tabla)
MINUS
(SELECT egyik FROM tabla
INTERSECT
SELECT masik FROM tabla)Joinos kerdesre: A from utani sorrend szamit.
-
Ispy
veterán
válasz dellfanboy #2560 üzenetére
soha nem használtam right joint....
"Debugging is like being the detective in a crime movie where you're also the murderer."
-
jocomen
aktív tag
válasz dellfanboy #2560 üzenetére
Ha jól értem a kérdést, akkor:
SELECT oszlop1
FROM tabla
WHERE oszlop1 NOT IN (SELECT oszlop2 FROM tabla); -
Apollo17hu
őstag
válasz dellfanboy #2560 üzenetére
Nem JOIN-nal szoktam kötni, de - ha jól tudom -, akkor a FROM utáni sorrend dönti el, hogy melyik a "LEFT" és melyik a "RIGHT" tábla. A LEFT JOIN és a RIGHT JOIN is "gyenge" kötés, tehát az egyik táblának vesszük az összes rekordját, és amihez párt találunk, ahhoz hozzácsapjuk a másik táblából a szükséges mezőket, ahol pedig nincs pár, az NULL-értékkel kerül feltöltésre.
Ebből következik, hogyha neked csak azok az id-k kellenek, amelyek kizárólag az egyik táblában vannak, akkor a másik táblát gyengén kell kötnöd hozzá, majd a WHERE záradékban meg kell adnod, hogy a másik táblából bekötött id-k helyett NULL-érték szerepeljen. Valahogy így:
SELECT egyik_tabla.id
FROM egyik_tabla
LEFT JOIN masik_tabla
ON egyik_tabla.id = masik_tabla.id
WHERE masik_tabla.id IS NULLMegj.: gugliba beírod, hogy sql join, és rámész a képkeresőre, meg fogsz világosodni.
-
sztanozs
veterán
válasz dellfanboy #2565 üzenetére
Bár az előzőek közül a NOT IN-es megoldás a legegyszerűbb, célszerű azért ezt kerülni. Inkább a JOIN a megfefelő erre a célra.
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Ispy
veterán
válasz dellfanboy #2631 üzenetére
Milyen SQL? Keress valami MONTH, DATEPART szerű függvényt.
"Debugging is like being the detective in a crime movie where you're also the murderer."
-
bpx
őstag
válasz dellfanboy #2633 üzenetére
where
extract(day from date_from) = 1
and extract(day from date_to + 1) = 1
and trunc(date_from, 'MM') = trunc(date_to, 'MM') -
bambano
titán
válasz dellfanboy #2633 üzenetére
én a két dátum különbségét venném napban és az alapján válogatnék.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
bpx
őstag
válasz dellfanboy #2641 üzenetére
pl. február:
where
date_to is null
and trunc(date_from, 'MM') = date'2014-02-01' -
Ispy
veterán
válasz dellfanboy #2673 üzenetére
select year(period), month(period), ügyfél_id
from tábla
group by year(period), month(period), ügyfél_id
having count(*)=1"Debugging is like being the detective in a crime movie where you're also the murderer."
-
martonx
veterán
-
Khelben
nagyúr
válasz dellfanboy #2745 üzenetére
select distinct id
from tábla
where faktor=-1
and dátum between perióduskezdete and periódusvége -
sztanozs
veterán
válasz dellfanboy #2759 üzenetére
Építsd fel újra (lépésenként) a lekérdezést és a végén meg fogod találni azt a logikai hibát, ami a nulla elemű eredményhalmazt okozza...
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Apollo17hu
őstag
válasz dellfanboy #2759 üzenetére
Nem biztos, hogy hibás. Attól függ, mi a kérdés, amire a scriptet írod.