Hirdetés

2017. október 21., szombat

Gyorskeresés

Útvonal

Fórumok  »  Szoftverfejlesztés  »  SQL kérdések (kiemelt téma)

Hozzászólások

(#1) Imrege


Imrege
(újonc)

Van egy SQL problémám:
Van két tábla. Az egyk neve legyen A, a másik B. ''A'' tábla tartalma: KVOD, TKOD, DATUM, MENNY, stb. ''B'' tartalma: VKOD, TKOD. A mezőnevek egyezősége nem véletlen.
A feladat: Töröljük ki ''A'' táblából azokat a sorokat, amelyek benne vannak a ''B'' táblában! (természetesen VKOD és TKOD is meg kell, hogy egyezzen)

Vajon hogy néz ki az SQL parancs?


[Szerkesztve]

(#2) Snypie válasza Imrege (#1) üzenetére


Snypie
(újonc)

DELETE FROM A
WHERE A.VKOD = B.VKOD
AND A.TKOD = B.TKOD

(#3) Imrege válasza Snypie (#2) üzenetére


Imrege
(újonc)

Igen, az ACCESS ennél a megoldásnál kérte a B.VKOD illetve a B.TKOD értékét paraméterként. Merthogy ugyebár a B tábla nincs felsorolva...

(#4) Tersius válasza Snypie (#2) üzenetére


Tersius
(tag)

Halkan mondom, mert lehet, hogy hulyeseg (bar igy tanitottak nekem, azt hiszem):

DELETE FROM A
WHERE A.VKOD = B.VKOD
AND A.TKOD = B.TKOD

A B.VKOD helyett egy alselectet csinalj.

..
WHERE VKOD=(SELECT VKOD FROM B)
..

Ez csak egy tipp, en igy probalnam megcsinalni (oracle 9i alatt, ha ez szamit)

''My curvy sword at your neck, you unclean son of a dog of the female persuasion!''

(#5) Alan válasza Tersius (#4) üzenetére


Alan
(fanatikus tag)

DELETE FROM A
WHERE VKOD =
(SELECT VKOD FROM B
WHERE B.VKOD = A.VKOD
AND B.TKOD = A.TKOD)

(#6) lao ce válasza Alan (#5) üzenetére


lao ce
(fanatikus tag)

vaaagy oracle-ben legalabbis menne ha kiprobalnam:

delete from A
where (VKOD, TKOD) in (select VKOD, TKOD from B)

(szerk: azt hiszem)

[Szerkesztve]

nicht kompot

(#7) chop


chop
(őstag)

bizony-bizony, buta accessnek alselect kell..mysqlben nem..access(officeban) 100 rongy korul van, mysql ingyenes..kesz:)

(mielott vki lehurrogna: tudom, az access mezei felhasznaloknak keszult, de konyorgom, mi a szarnak kellett jet sqlt bele rakni, miert nem volt jo a szabvany...? ejnye-ejnye, billy boy..)

(#8) RAM


RAM
(PH! addikt)

Sziasztok!

Segítséget szeretnék kérni egy primitív (egy soros megoldásokkal) feladatsor megoldásához.

(Esetleg kérdedznék még programozásból lámer kérdéseket...)

Ki lenne ily kedves segítőkész?



[Szerkesztve]

Csak tisztán

(#9) Tersius válasza RAM (#8) üzenetére


Tersius
(tag)

En irtam neked imelt, hogy egy probat tehetunk, hatha sikerul, de nem valaszoltal.

[Szerkesztve]

''My curvy sword at your neck, you unclean son of a dog of the female persuasion!''

(#10) RAM válasza Tersius (#9) üzenetére


RAM
(PH! addikt)

Nem tudom mi van, vmi gáz van ezzel az emaillel!

Akkor elküldöm neked miről lenne szó egy másik e-mailcímről!

Csak tisztán

(#11) RAM válasza RAM (#10) üzenetére


RAM
(PH! addikt)

Levél most ment! (feladatbenne (levélben, csatolt doc-ban is))

Csak tisztán

(#12) sequator


sequator
(senior tag)

SOS kellene help, remélem tud valaki segíteni.
win2ksp4+sql2ksp3 éppen query analyserben írtam egy selectet, és elment az áram, de a querym nem volt elmentve, honnan lehet esetleg előbányászi a query tartalmát?
azt remélem, hogy valahol csak magvan valami tmp fájlban vagy hasonlóban, nagyon kellen, mert egész napi melómat újra kellen kezdenem:(

Sautia

sequator

(#13) sequator


sequator
(senior tag)

első up

Sautia

sequator

(#14) sequator


sequator
(senior tag)

második up, ha valaki tud segítsen, mert még QA-t sem merek indítani, nehogy felülírja az esetleg létező untitled.sql-t :O

Sautia

sequator

(#15) Robiba válasza sequator (#14) üzenetére


Robiba
(kvázi-tag)

Szerintem memóriában tárolja, nincs semmi tmp :(
Nem tudom milyen select, de ha egy napig tart, biztos rossz. (bocsi)

Billentyűzet hiba! Nyomjon F1-et a folytatáshoz!

(#16) sequator válasza Robiba (#15) üzenetére


sequator
(senior tag)

nem egy select és nem egy napig fut, hanem a nap folyamán írtam 10-15 selectet különböző lekérdezéskhez és azok kellettek volna.
azért kösz, szerncsére az 5 legfontosabbat sikerült egész hamar újra megírni:(

Sautia

sequator

(#17) OddMan


OddMan
(őstag)

Egy kicsit off...
Tanultam a relációs adatbázisokról. Megtanultam a normálformákat és ismerem az egyed-kapcsolat modellt is. A kapcsolatokról is tanultam és azok ábrázolásáról az egyed-kapcsolat modellben. A kérdésem, hogy hogyan kezdjek el megtervezni egy egyszerűbb adatbázist? Szal egyed-kapcsolat modell segítségével el akarok jutni a 3nf-ig és a kapcsolatokat is ábrázolni akarom. :F :U
Egy olyan logikai tervig szeretnék eljutni, amiből már könnyedén lehet bevinni a dolgokat egy relációs adatbáziskezelőbe.


[Szerkesztve]

''A szíved szabad! Légy bátor és kövesd!''

(#18) L3zl13 válasza OddMan (#17) üzenetére


L3zl13
(PH! félisten)

Ceruzával és papírral... :U

Szvsz megnézed milyen adatokat kell tárolni, ezeket szépen felírod magadnak, aztán normalizálod az adatbázist.

Aki hülye, haljon meg!

(#19) OddMan válasza L3zl13 (#18) üzenetére


OddMan
(őstag)

Igen papíron akarom megtervezni.
Tehát akkor először az egyedeket kell összeszednem és utána azoknak a tulajdonságait kell megadnom igaz? :F :U Ez után kell a normalizálást elkezdeni és aztán a kapcsolatokat jelölni? :F :U

[Szerkesztve]

''A szíved szabad! Légy bátor és kövesd!''

(#20) L3zl13 válasza OddMan (#19) üzenetére


L3zl13
(PH! félisten)

Szvsz a kapcsolatok már a normalizálásból adódnak jórészt... Tehát ez párhuzamosan kéne, hogy történjen.

Aki hülye, haljon meg!

(#21) OddMan válasza L3zl13 (#20) üzenetére


OddMan
(őstag)

Nem tudsz egy doksit a neten, ahol egy végtelenül egyszerű példán végig lehetne kísérni a folyamatot? :U

''A szíved szabad! Légy bátor és kövesd!''

(#22) L3zl13 válasza OddMan (#21) üzenetére


L3zl13
(PH! félisten)

Háááát, ha tanultál róluk, akkor ott kellett volna találkoznod példával szerintem. Sajnos nem tudok ilyen doksit, de a gugli talán segíthet.

Aki hülye, haljon meg!

(#23) rollingrock


rollingrock
(lelkes újonc)

Én sahosem értettem igazán ezeket a normálformás alakokat ezért mindig ''ösztönösen'' úgy készítettem el az adatbázis felépítést ahogy szerintem jó. Aztán kiderült néha hogy így teljesen mégsem jó...

:(((

(#24) tildy


tildy
(PH! nagyúr)

Huh tudna valaki segíteni az alábbiakban?

Mi az indexelés?
Mire valók a kulcsok?
Hogy lehet két táblát ''összemergelni''?
mik a DDL, DML, DCL?

Ja és pár relációt is mondajtok már
sürgős!!!

[Szerkesztve]

"Tartsd magad távol azoktól, akik le akarják törni az ambíciódat! A "kis" emberek mindig ezt teszik, de a nagyok éreztetik veled, hogy te is naggyá válhatsz" - Mark Twain

(#25) VladimirR válasza tildy (#24) üzenetére


VladimirR
(PH! nagyúr)

angolul jo? mert akkor index-rol itt talaltam egy leirast => Bővebben: link

(#26) tildy válasza VladimirR (#25) üzenetére


tildy
(PH! nagyúr)

Jó lesz;)

"Tartsd magad távol azoktól, akik le akarják törni az ambíciódat! A "kis" emberek mindig ezt teszik, de a nagyok éreztetik veled, hogy te is naggyá válhatsz" - Mark Twain

(#27) Aaalbi válasza tildy (#24) üzenetére


Aaalbi
(tag)

Szia

Ezek benne vannak a legtöbb adb-kezelés könyvben.:))


[Szerkesztve]

(#28) tildy válasza Aaalbi (#27) üzenetére


tildy
(PH! nagyúr)

azt tudom, de az nekem pont vidéken - Jászalsószentgyörgyön - van én meg pesten vagyok.
Szal otthon van oracle könyvem...

"Tartsd magad távol azoktól, akik le akarják törni az ambíciódat! A "kis" emberek mindig ezt teszik, de a nagyok éreztetik veled, hogy te is naggyá válhatsz" - Mark Twain

(#29) Nedudgi válasza tildy (#24) üzenetére


Nedudgi
(fanatikus tag)

Indexelés: Alapvetően könnyebbé teszi a keresést mert egy mező szerint sorbarendezi a rekordok azonosítóit (kb).

Kulcsok: azonosítják a rekordokat. Összekapcsolják a táblákat egy táblába idegen kulcs, egy másikban (a kapcsolt táblában elsődleges)

Mergelés, utána kéne néznem mert még nem csináltam.

DDL: Data Definition Language
DML: Data Manipulation Language (SQL az 2in 1:D)

Most látom hogy már egy napos a hozzászólásod, ha kell még segítség vegyél fe ICQ-ra. Segítek szívesen.

Relációk PL:

ADOSOK(azonosito, nev,.....)

KEZESEK(kezes_azon, nev, ados_azonosito....)

KEZESEK.ados_azonosito (idegen kulcs) -> ADOSOK.azonosito (elsodleges kulcs)

Remélem érthető lett:D

It took the computational power of three Commodore 64s to fly to the moon. It takes a 486 to run Windows 95. Something is wrong here. -- SC sig file UBUNTU - KDE - Rock'n'Roll

(#30) guest666


guest666
(fanatikus tag)

Szevasztok, egy SQL lekérdezésre lenne szükségem:
A CIKK tábla tartalma CIKKSZAM, CIKKNEV, CIKKCSOPORT, EGYSEGAR. Feladat: Cikkcsoportonként melyik termék a legolcsóbb ?
Köszi.

(#31) Goose-T válasza guest666 (#30) üzenetére


Goose-T
(PH! kedvence)

 

select min(EGYSEGAR), CIKKCSOPORT from CIKK group by CIKKCSOPORT

Valahogy így.

(#32) guest666 válasza Goose-T (#31) üzenetére


guest666
(fanatikus tag)

Köszi, eddig oké, csak ez sajnos a legalacsonyabb árakat írja ki a feladat pedig hogy a legolcsób terméket írja ki, tehát a legalacsonyabb árhoz CIKKNEV-et, de MS Accesben sehogy tudom kiíratni...

(#33) Goose-T válasza guest666 (#32) üzenetére


Goose-T
(PH! kedvence)

Ja, akkor valahogy így próbálkozz:


select CIKK.CIKKNEV, MINARAK.AR from
(select min(EGYSEGAR) as AR, CIKKCSOPORT
from CIKK group by CIKKCSOPORT)
as MINARAK
join CIKK on MINARAK.AR = CIKK.EGYSEGAR

Access-el nem igazán lehet ilyesmit összekattintgatni, vagy nagyon nehézkes lenne.

Már 3x kellett átszerkesztenem, hogy rendesen látszódjon...

[Szerkesztve]

(#34) sky77 válasza guest666 (#32) üzenetére


sky77
(fanatikus tag)

Nothing

[Szerkesztve]

''Emberek, vessetek a mókusok elé!''

(#35) sky77 válasza Goose-T (#33) üzenetére


sky77
(fanatikus tag)

Szerintem az is fontos lenne, hogy abból a cikkcsoportból selectálja ki a legalacsonyabb árnak megfelelőt, amelyik cikkcsoportnak a legalacsonyabb áráról van szó, pl így:

select CIKK.CIKKNEV, MINARAK.AR from
(select min(EGYSEGAR) as AR, CIKKCSOPORT
from CIKK group by CIKKCSOPORT)
as MINARAK
join CIKK on MINARAK.AR = CIKK.EGYSEGAR
and CIKK.CIKKCSOPORT = MINARAK.CIKKCSOPORT

''Emberek, vessetek a mókusok elé!''

(#36) Goose-T válasza sky77 (#35) üzenetére


Goose-T
(PH! kedvence)

Igazad van, ezt elfelejtettem. Kár hogy megmondtad, mert így már guest666-nak semmin nem kell gondolkoznia. :)

(#37) guest666


guest666
(fanatikus tag)

THX !
Elég komoly lett :) pedig milyen egyszerűnek tűnt...

(#38) sky77 válasza Goose-T (#36) üzenetére


sky77
(fanatikus tag)

Lehet, hogy mire beírtam, ráébredt magától ;)

''Emberek, vessetek a mókusok elé!''

(#39) jeszi


jeszi
(fanatikus tag)

Sziasztok!
(Gyenge vagyok sql-ben)
Van egy lekérdezés egy Access adatbázisban:

SELECT O.ORVOS_ID, O.VEZNEV1, O.KERNEV1_1, O.KERNEV1_2, I.INTEZMENY_NEV, I.IRSZ, I.TELEPULES, I.CIM, OIS.TELEFON1, OIS.TELEFON2, OIS.MELLEK, ORR.MEGYE, ORR.ORSZAGRESZ
FROM ORVOS AS O, INTEZMENY AS I, ORVOS_INT_SW AS OIS, ORVOS_SZAKVIZSGA_SW AS OSS, SZAKVIZSGA AS SZ, TELEPULES AS T, ORSZAGRESZ AS ORR
WHERE O.ORVOS_ID=OIS.ORVOS_ID And OIS.INTEZMENY_ID=I.INTEZMENY_ID And O.ORVOS_ID=OSS.ORVOS_ID And OSS.SZAKVIZSGA_ID=SZ.SZAKVIZSGA_ID And I.TELEPULES=T.TEL_NEV And T.MEGYE=ORR.MEGYE And SZ.SZAKVIZSGA=PSZAKVIZSGA AND O.ACTIVE = 1
AND O.ORVOS_ID NOT IN
(SELECT E.ORVOS_ID FROM EREDMENY E
WHERE E.EREDMENY_TIP_ID IN (11, 12, 13))
ORDER BY ORR.ORSZAGRESZ, ORR.MEGYE, I.TELEPULES, I.CIM;


Ez borzasztó lassú, valahogy optimalizálni szeretném ezt a lekérdezést (vagy az adatbázist).
Tudna valaki segíteni? Az adatbázisról készítettem egy képet (táblák, kapcsolatok), azt el tudom küldeni e-mail-ben.

Nem félek a haláltól, majdcsak túlélem valahogy!

(#40) sky77 válasza jeszi (#39) üzenetére


sky77
(fanatikus tag)

Ezt így hirtelen kicsit nehéz átlátni... Talán jobb lenne előről kezdeni a lekérdezést, úgy, hogy elmondod, mi a feladat (milyen adatokat szeretnél visszakapni) és ehhez milyen táblák (ill. mezők) állnak rendelkezésre. Biztosan lehetne ezt is optimalizálni, de valahogy nem visz rá a lélek, hogy átbogarásszam.

''Emberek, vessetek a mókusok elé!''

(#41) jeszi válasza sky77 (#40) üzenetére


jeszi
(fanatikus tag)

Küldhetek egy e-mailt?

Az adatbázisról készített képet szeretném elküldeni...

[Szerkesztve]

Nem félek a haláltól, majdcsak túlélem valahogy!

(#42) sky77 válasza jeszi (#41) üzenetére


sky77
(fanatikus tag)

Természetesen.

''Emberek, vessetek a mókusok elé!''

(#43) sky77 válasza jeszi (#39) üzenetére


sky77
(fanatikus tag)

Küldtem választ, de ide is leírom, biztos, ami biztos.
Szerintem, ha mondjuk left join-nal egy egyértelmű megfeleltetést tudsz felállítani a táblák között, kisebb adathalmazból fog dolgozni a select, így van rá esély, hogy gyorsabb lesz, ugyanis

select * from a,b
visszaadja az összes olyan elemet, ami mind a-nak, mind b-nek halmaza, úgy, hogy b összes eleméhe rendeli a összes elemét. Így aztán a where feltétel egy adott esetben akár óriási adathalmazból választja ki azokat a sorokat, akik a kitételnek megfelelnek.
Ha pl így oldod meg:
select * from a
left join b on b.x=a.x

tehát már az összekapcsolásban szerepel a ''where feltétel'', eleve kisebb adathalmazt kapsz, amit nem is kell tovább szűkíteni.
Próbáld meg így, hátha segít valamicskét. Addig is nézegetem a kódot, ha időm engedi.


Szerk.: Lehet, hogy célszerű lenne, ha kevesebb adatot hozna a select, így nem kéne annyi táblát összekapcsolni, s a bővebb információk csak akkor kerülnének lekérdezésre, ha a felhasználó úgy kívánja (pl. gombnyomásra). Már ha a feladat engedi, persze.

[Szerkesztve]

''Emberek, vessetek a mókusok elé!''

(#44) sky77 válasza jeszi (#39) üzenetére


sky77
(fanatikus tag)

Így gyorsabb? Lefut egyáltalán? Én sajna nem tudom kipróbálni.


SELECT O.ORVOS_ID, O.VEZNEV1, O.KERNEV1_1, O.KERNEV1_2,
I.INTEZMENY_NEV, I.IRSZ, I.TELEPULES, I.CIM,
OIS.TELEFON1, OIS.TELEFON2, OIS.MELLEK,
ORR.MEGYE, ORR.ORSZAGRESZ
FROM ORVOS AS O
left join orvos_int_sw as ois on ois.orvos_id=o.orvos_id
left join intezmeny as i on i.intezmeny_id=ois.intezmeny_id
left join telepules as t on t.tel_nev=i.telepules
left join orszagresz as orr on orr.megye=t.megye
left join orvos_szakvizsga_sw as oss on oss.orvos_id=o.orvos_id
left join szakvizsga as sz on sz.szakvizsga_id=oss.szakvizsga_id
WHERE SZ.SZAKVIZSGA=PSZAKVIZSGA and O.ACTIVE = 1
AND O.ORVOS_ID NOT IN
(SELECT ORVOS_ID FROM EREDMENY
WHERE EREDMENY_TIP_ID IN (11, 12, 13))
ORDER BY ORR.ORSZAGRESZ, ORR.MEGYE, I.TELEPULES, I.CIM;


Talán egy-két táblát is össze lehetne vonni, első ránézésre nem teljesen tűnt indokoltnak, hogy külön táblában vannak adatok, persze lehet hogy tévedek.
Pl.:
orvos_szakvizsga_sw --> orvos
orszagresz --> telepules


[Szerkesztve]

[Szerkesztve]

''Emberek, vessetek a mókusok elé!''

(#45) jeszi válasza sky77 (#44) üzenetére


jeszi
(fanatikus tag)

Köszönöm, mindjárt kipróbálom!
Bocs, hogy csak most írok, de közben akadt egy-két feladatom

Nem félek a haláltól, majdcsak túlélem valahogy!

(#46) jeszi


jeszi
(fanatikus tag)

Az egész orvos adatbázist átraktam Access-ből MySql-be. Az átkonvertálást DBTools Manager Professional programmal végeztem.

Miért van az, hogy ugyan az a lekérdezés Access-ben kb. 5 másodpert, MySql-ben meg 15-20 perc?

Nem félek a haláltól, majdcsak túlélem valahogy!

(#47) sky77 válasza jeszi (#46) üzenetére


sky77
(fanatikus tag)

Mysql-hez sajna a legkevésbé sem értek, viszont errefelé érdemes lehet körülnézni: Bővebben: link
Ezen belül is talán ez a legmegfelelőbb topic: Bővebben: link
Remélem tudnak segíteni.

''Emberek, vessetek a mókusok elé!''

(#48) sky77 válasza jeszi (#46) üzenetére


sky77
(fanatikus tag)

Tulajdonképpen pont az inner join-okat szerettem volna kikerülni (select * from a,b is egy inner join), csak ugye az access nem akarta megenni. #44-ben leírt lekérdezést a mysql sem veszi be?

''Emberek, vessetek a mókusok elé!''

(#49) sky77 válasza sky77 (#47) üzenetére


sky77
(fanatikus tag)

Látom már rátaláltál. Akkor nem szóltam... :B

''Emberek, vessetek a mókusok elé!''

(#50) heihachi válasza jeszi (#46) üzenetére


heihachi
(PH! addikt)

15-20 perc :Y
Úristen ott generális probléma van... Még indexek nélkül jó nagy adatbázisban is sok. A MySQL a gyorsaságáról (is) híres...

"Lehet a Shift 2 már realisztikusabb mint a valóság" by NOD

Útvonal

Fórumok  »  Szoftverfejlesztés  »  SQL kérdések (kiemelt téma)
Copyright © 2000-2017 PROHARDVER Informatikai Kft.