sql segítség lekérdezéshez

Lehet én néztem be nagyon valamit, de megpróbálol elmondani egyszerűen.
Vagy adatbázik a lekérdezés számára fontos táblákkal.
user_menu (user_id,menu_id) - melyik user melyik menühöz van rendelve
menu (id,menu_group_id) - melyik menü melyik menücsoporban van
menu_group (id,name,...) - a menücsoportok
user_group(menu_id,group_id) - melyik csoporthoz milyen menük tartoznak
own_group(user_id,group_id) - melyik user melyik csoporthoz van rendelve

kb ennyi lenne ami fontos a dologban, hogy elmondhassam
szeretném megtudni, hogy hány menu_group található egy user adott alatt.

A lekérdezés így néz ki:

select menu_group.* from user_menu,menu,menu_group,user_group,own_group where menu_group.id=menu.menu_group_id and (user_menu.menu_id=menu.id or user_group=menu.id) and own_group.group_id=user_group.group_id) and owen_group.user_id=2 and user_menu.user_id=2 group by menu_group.id

lehetnek egyes user_id-nak saját menüjük és a csoporban lévő menükhöz is hozzáférhetnek, aminek tagjuk, így a kapott menülista alapján elméletileg kijönne hogy az adott menük milyen menücsoporban vannak, és magkapnám, hogy adott user hány menücsoporthoz tartozik és melyek ezek.

A gondom az, hogy a user egy csoporthoz sem tartozik, viszok vannak saját menüi, akkor üres eredményt kapok, ha akár 1 csoporjoz is tartozik, márik megkapom az összes eredményt.

Kérlek segítsetek egy helyes select megadásában.

Hozzászólások

A gondod az, hogy egyértelműen meghatározod, hogy a user-nek csoportban kell lennie. Mégpedig itt:
where ... and owen_group.user_id=2 and

Vagyis ha a user nincs csoportban, akkor itt egy sohasem teljesülő feltételt adsz meg

ennek kb. így kéne kinézni imho:
and (owen_group.user_id=2 or user_menu.user_id=2)

"szeretném megtudni, hogy hány menu_group található egy user adott alatt."

SELECT COUNT(mg.*) FROM menu_group mg
INNER JOIN menu m ON m.menu_group_id = mg.id
INNER JOIN user_menu um ON um.menu_id = m.id
WHERE um.user_id = 42

--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.

Üdv mindenkinek!

Akadt egy kis problémám, és ide írom le, mert nem akarok új topikot nyitni neki.

Tehát a probléma a következő:

Van két táblám: vevők és szállítólevelek.
A szállítóleveles táblában van egy ugyfel mező ami az adott vevő idjét reprezentálja.
A szállító készítése előtt egy listából kell kiválasztani a vevőt, és mivel gyk. pár vevőnek szállítózunk csak, ezért azt szeretném, hogy a legtöbbet szállítózott vevő legyen legfelül.

Ezzel semmi gond nincs:

SELECT A2.* FROM szallitok A1, ugyfelek A2 WHERE A2.ugyfel_azon = A1.ugyfel GROUP BY A2.ugyfel_azon

Azonban ez nem hozza azokat a vevőket akiknek még nem szállítóztunk.
Szerintetek hogyan kellene megoldanom?
Próbáltam így:
SELECT COUNT(A1.id) AS RANG, A2.* FROM szallitok A1, ugyfelek A2 WHERE ((A2.ugyfel_azon = A1.ugyfel) OR (RANG = 0)) GROUP BY A2.ugyfel_azon

de nem jó.

Segítségeteket előre is köszönöm.

Sziasztok!

Sajnos nem vagyok egy nagy sql virtuóz, viszont tudom, hogy hol kell olyan segítséget kérnem ami gyorsan és érthetően hozzásegít a kívánt eredmény eléréséhez.
Lehet, hogy ostobának tűnik a kérdés de nézzétek el nekem. Tehát a problémám:

van 3 táblám, az egyik egy function tábla a másik egy implementációs fájlokat jelölő tábla a harmadik pedig egy kapcsolótábla ami a function-t kapcsolja össze az implementációs modullal id alapján.

a táblák kb:

function
--------
id
name
description

implementation
--------------
id
name
description

func_imp_relation
-----------------
func_id
imp_id

egy olyan lekérdezést szeretnék csinálni, vagy view-t ami egy nézetbe pakolja nekem az összes információt. Egy rekordként lássam azt, hogy melyik function melyik implementációban van.
Esetleg ha valaki tudna egy egyszerű példát erre akkor lekötelezne!

Előre is köszönöm!

üdv,
Tibi
on all of them solvable

Szerintem:

Nézettábla lesz. Ha nem kell lehagyod az elejét a SELECT-ig. Az ID-ket kihagytam, de ennek mintájára beleírhatod ha kell.

CREATE VIEW nezettabla AS SELECT function.name AS FUNC_NEV, function.description AS FUNC_LEIRAS, implementation.name AS IMP_NEV, implementation.description AS IMP_LEIRAS FROM function, implementation, func_imp_relation WHERE (( function.id = func_imp_relation.func_id ) AND (implementation.id = func_imp_relation.imp_id) );

Sziasztok!

Szeretném a segítségeteket kérni ebben a dologban: Létezik kettő táblám. Mind a kettőben függvény nevek vannak tárolva. Az egyik egy már meglévő rendszer függvényei a másik pedig egy elemzés során kapott függvény nevek.
Amiket tárolok róluk azok ezek - id, név, implementációs fájl, típus, elérési útvonal.
Mind a kettő táblában ezek az oszlopok szerepelnek természetesen.
A kérdésem az lenne, hogy milyen módon tudnám azt megcsinálni, hogy megvizsgáljam a következőket.
A halmaz = új függvények
B halmaz = meglévő függvények

1. B halmazban megnézni, hogy A halmaz bármely eleme szerepel-e benne. Ha egyáltalán nem létezik A halmaz eleme B halmazban akkor egy új függvény. De előfordulhat, hogy név alapján egyezik, de más az implementációs fájl. Ezt a külömbséget is észre kell venni. Mert a neve alapján nem lehet egyedi egy függvény. Azonos nevü de külömböző implementációs fájlban szereplő függvény az kettő függvény ugye.

2. Ha létezik B halmazban A halmaz eleme akkor meg kell nézni, hogy mindenben egyeznek-e vagy eltérnek valamiben. Itt kiderül, hogy egy függvény-e. Csak akkor beszélhetünk ugyan arról a függvényről ha A és B halmazban teljesen megyeggyeznek az attributumai, persze az id és az elérési út nem. :)

Tömören összefoglalva egy olyat szeretnék, hogy A és B között minden olyan elemet visszakapni ami nem szerepel B-ben de eleme A-nak. Egységként tekintve a nev,implementációs fájl,típus triora. Rekord szinten szeretném összehasonlítani őket.

Előre is köszönöm a válaszokat és a segítségeteket!

üdv,
Tibi

on all of them solvable

Még nem találtam válaszat a kérdésemre de subselectekkel tudom elképzelni. Ha találok megoldást, illetve annak implementálását akkor megírom ide is. Bár lehet ennyire nem összetett ez a dolog mint ahogy én vázoltam. De a tisztán látás végett jobb ha majd írok róla még egy kis example-t.
Ha esetleg nektek is lenne javaslatotok még mindig szívesen látom őket!

Köszönöm!

üdv,
Tibi

on all of them solvable