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

üzenetek

hozzászólások


Imrege
(csendes tag)

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]


Snypie
(csendes tag)

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


Imrege
(csendes tag)

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...


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)


Alan
(aktív tag)

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


lao ce
(aktív tag)

vaaagy oracle-ben legalabbis menne ha kiprobalnam:

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

(szerk: azt hiszem)

[Szerkesztve]


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..)


RAM
(őstag)

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]


Tersius
(tag)

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

[Szerkesztve]


RAM
(őstag)

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!


RAM
(őstag)

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


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
(senior tag)

első up

Sautia


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


Robiba
(tag)

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


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


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]


L3zl13
(nagyúr)

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.


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]


L3zl13
(nagyúr)

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.


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


L3zl13
(nagyúr)

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.


rollingrock
(csendes tag)

É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ó...

:(((


tildy
(nagyúr)
Blog

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]


VladimirR
(nagyúr)

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


tildy
(nagyúr)
Blog

Jó lesz;)


Aaalbi
(tag)

Szia

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


[Szerkesztve]


tildy
(nagyúr)
Blog

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


Nedudgi
(aktív 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


guest666
(aktív 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.


Goose-T
(veterán)
Blog

 

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

Valahogy így.


guest666
(aktív 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...


Goose-T
(veterán)
Blog

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]

sky77
(aktív tag)

Nothing

[Szerkesztve]


sky77
(aktív 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


Goose-T
(veterán)
Blog

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


guest666
(aktív tag)

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


sky77
(aktív tag)

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


jeszi
(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.


sky77
(aktív 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.


jeszi
(tag)

Küldhetek egy e-mailt?

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

[Szerkesztve]


sky77
(aktív tag)

Természetesen.


sky77
(aktív 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]

sky77
(aktív 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]

jeszi
(tag)

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


jeszi
(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?


sky77
(aktív 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.


sky77
(aktív 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?


sky77
(aktív tag)

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


heihachi
(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...

üzenetek