Autor | Zpráva | ||
---|---|---|---|
Tomek Profil * |
#1 · Zasláno: 23. 8. 2008, 12:53:11
Zdravím,
prosím poraďte jak vytvořit dotaz s takovýmto triviálním zadáním. Mám spojovací tabulku pro N:N se sloupci id_product a id_param. Chci vybrat všechny id_product, které mají VŠECHNY parametry, tedy něco jako SELECT * FROM tabulka WHERE id_param IN (1,2,3,4..) GROUP BY id_product Rozdíl je v tom, že takto mi IN vybere všechny, které splňují alespoň jednu podmínku. Díky za každou radu, T. |
||
Alphard Profil |
#2 · Zasláno: 23. 8. 2008, 12:59:02
tady je zdá se nevhodně použítá konstrukce in
„Mám spojovací tabulku pro N:N“ chtělo by to více informací, aby by možné pospojovat ty 3 tabulky dohromady, takhle nevím, co poradit, protože id_param zřejmě obsahuje 1 číslo a je logické, že nelze splnit více podmínek, např. číslice 2 se nemůže zároveň rovna 2 a 3 |
||
Tomek Profil * |
#3 · Zasláno: 23. 8. 2008, 14:09:41
Diky za odpoved, posilam vic info (zaroven to trochu zjednodusim):
tabulka 1 - produkty tabulka 2 - parametry obecne jeden produkt muze mit vic parametru a zaroven 1 parametr muze byt u vic produktu, tzn. N:N mam spojovaci tabulku se sloupci id_product, id_param Uloha je takova, ze chci napr. vyhledat vsechny auta (tzn. produkty), ktere maji airbag, ABS a palubni pocitac. Vim ze nemam pouzit IN, protoze mi to najde vsechna auta, ktera maji jen neco z toho. Ja naopak potrebuji vyfiltrovat jen ta auta, ktera maji vse. Snad jsem to popsal trochu pochopitelneji. Diky, T. |
||
ninja Profil |
#4 · Zasláno: 23. 8. 2008, 16:04:32
Tomek: Tabulka parametri je atributova, nebo vice sloupcova?
Dotaz asi nejak takto: SELECT * FROM prudukty pr JOIN spojovacka sp ON pr.id_produkt = sp.id_produkt JOIN parametry pa ON sp.id_param = pa.i_param WHERE pa.abs = 'ano' AND pa.pocitac = 'ano' nebo pro atributovou tabulku SELECT * FROM prudukty pr JOIN spojovacka sp ON pr.id_produkt = sp.id_produkt LEFT JOIN parametry pa ON sp.id_param = pa.i_param WHERE (pa.atribut = 'abs' AND pa.hodnota = 'ano') OR (pa.atribut = 'pocitac' AND pa.hodnota = 'ano') |
||
Kajman_ Profil * |
#5 · Zasláno: 24. 8. 2008, 18:10:39
SELECT * FROM tabulka WHERE id_param IN (1,2,3,4..) GROUP BY id_product
Rozdíl je v tom, že takto mi IN vybere všechny, které splňují alespoň jednu podmínku. Pokud to lehce upravíte na SELECT id_product FROM tabulka WHERE id_param IN (1,3,5,8,6) GROUP BY id_product HAVING count(distinct id_param)=5 tak to vypíše takové, které mají zadaný počet parametrů z té závorky. |
||
Časová prodleva: 16 let
|
0