Portál AbcLinuxu, 15. května 2025 06:11

Dotaz: SQL dotaz u relace M:N

9.3.2012 12:13 Kloban | skóre: 13 | Brno
SQL dotaz u relace M:N
Přečteno: 1102×
Odpovědět | Admin
Ahoj,
Mám tabulku programy a tabulku vlastnosti. Tyto tabulky jsou propojeny tabulkou programy_vlastnosti (relace M:N).
Každý program má tedy několik vlastností a zárověň každá vlastnost je přiřazena několika programům.
Potřeboval bych dotaz který mi vypíše program a k němu všechny vlastnosti které má. Respektive potřebuji toto: mám sadu požadovaných vlastností a potřebuji vědět které programy tyto vlastnosti mají.
Doufám, že je to srozumitelné. Dík Dan

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

9.3.2012 12:48 kuka
Rozbalit Rozbalit vše Re: SQL dotaz u relace M:N
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jednoduche je treba spojit programy s vlastnostmi filtrovanymi jen pres ty pozadovane, grupovat pres programy a vzit jen ty, ktere maji count odpovidajici poctu pozadovanych vlastnosti. To funguje samozrejme jen pokud nemohou byt vlastnosti prirazovany nasobne, jinak bych udelal asi nejaky retezec exists podminek.
Josef Kufner avatar 10.3.2012 02:01 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: SQL dotaz u relace M:N
Toto se tu kdysi řešilo a po celkem dlouhé diskuzi z toho vyšlo toto nejlépe. Co jsem to zkoušel v praxi, tak to funguje celkem dobře, jen to chce mít dobře udělané indexy.
Hello world ! Segmentation fault (core dumped)
rADOn avatar 9.3.2012 19:36 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: SQL dotaz u relace M:N
Odpovědět | | Sbalit | Link | Blokovat | Admin
Stačí si strojově vygenerovat pro každou požadovanou vlastnost INNER JOIN, zhruba tak

pokud hledas vlastnosti X, Y, Z,…
SELECT … FROM programy p 
JOIN vlastnosti v1 ON p.program_id = v1.program_id AND v.value = X
JOIN vlastnosti v2 ON p.program_id = v2.program_id AND v.value = Y
JOIN vlastnosti v3 ON p.program_id = v3.program_id AND v.value = Z
Vlastnost může být i nepovinná, v tom případě přidáš LEFT JOIN.
"2^24 comments ought to be enough for anyone" -- CmdrTaco

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.