Newsgroup: it.comp.appl.access
Titolo: Query difficile (per me)

Buongiorno a tutti!
Consideriamo la tabella seguente:
                | Pelo  | 4     | 2     |           |
                | Lungo | zampe | zampe | Mammifero | ...
----------------+-------+-------+-------+-----------+----
Pastore tedesco |   x   |   x   |       |    x      |
----------------+-------+-------+-------+-----------+----
Uomo            |       |       |  x    |    x      |
----------------+-------+-------+-------+-----------+----
...             |       |       |       |           |
Ovviamente, l'esempio è il più conciso possibile. La tabella può avere 
migliaia di elementi sia per riga che per colonna.
Se questa tabella la fate in excel e attivate i filtri, selezionando le 
caratteristiche
                | Pelo  | 4     | 2     |           |
                | Lungo | zampe | zampe | Mammifero | ...
----------------+-------+-------+-------+-----------+----
                |       |   x   |       |    x      |
otterrete, ovviamente, il pastore tedesco.
In relazionale, mi sono creato una tabella "Animali", una "caratteristiche" 
ed una di relazioni dove memorizzo i punti della matrice sparsa.
Bene: la query per fare la stessa cosa che in Excel mi sta facendo 
impazzire. L'unica soluzione che ho trovato è una cosa del genere
SELECT Animali.ID, Animali.Descrizione
FROM (relazioni AS relazioni_1 INNER JOIN Animali ON 
relazioni_1.id
 = 
Animali.ID) INNER JOIN relazioni ON Animali.ID = 
relazioni.id
WHERE (((relazioni.[id caratteristica])=199) AND ((relazioni_1.[id 
caratteristica])=418));
Ossia, aggiungere tante volte quante caratteristiche devo cercare più una, 
la tabella relazioni. Ovviamente, la query siffatta deve essere costruita al 
volo e questo incide negativamente sulle prestazioni.
Idee per fare di meglio?
-- 
Jonathan Canova
infoCHIOCCIOLAaladinoinformatica.com
www.aladinoinformatica.com
 

Ciao,
io farei una cosuccia un po azzardata.
Creerei un'unica tabella con aleno due colonne: nella prima metterei
l'animale (o un riferimento ad un animale) e nelle altre un valore intero
che rappresenta
le proprietą dell'animale espresse in bit. Dunque, tornando al tuo esempio:
Pasore Tedesco:     1101 = 13;
Uomo:                    0011 = 3;
Per le query di selezione esegui un filtraggio con opportune maschere a bit.
Ciao.
--
Simplex2
www.mdenittis.it

 Idee per fare di meglio?
Ciao Jonathan
credo di aver capito il problema ma siccome non sono sicuro della struttura
delle tabelle provo a postarla
Animali
-----------
Id Descrizione
1 Pastore tedesco
2 Uomo
Caratteristiche
------------
Id Descrizione
1 Pelo Lungo
2 Zampe 4
3 Zampe 2
4 Mammifero
Relazioni
------------
Id_Animale  Id_Caratteristica
1   1
1   2
1   4
2   3
2   4
Dunque, si vuole estrarre gli animali che hanno caratteristica uguale a 2 e
4
----
SELECT Animali.Id, Animali.Descrizione
FROM Animali INNER JOIN Relazioni ON Animali.Id = Relazioni.Id_Animale
WHERE Relazioni.Id_Caratteristica In (2,4)
GROUP BY Animali.Id, Animali.Descrizione
HAVING Count(1)=2
----
La query rende gli animali che hanno la caratteristica 2 o 4 quindi l'uomo e
il pastore tedesco ma la HAVING filtra solo l'animale che ha entrambe le
caratteristiche quindi solo il pastore tedesco.
Ci sono anche altri sistemi ma tutto sommato questo mi sembra il piů
semplice.
Ciao Giorgio

 ----
Allora: tu mi fai insieme triste e felice!
Triste perché mi confermi quello che sapevo, cioè che conosco poco, troppo 
poco l'SQL :-)
Felice perché pare funzionare. Non hai idea delle ore che ci ho speso... :-)
Grazie per adesso


 bit.
Intanto grazie!
Sono anni che giro d'intorno a questo problema (che, ovviamente è più vasto 
del quesito che ho posto oggi)
Dal link 
http://tinyurl.com/d4xn4
 vedi che era un'idea già provata.
Ma pare non esserci nessun modo veloce in SQL per fare la maschera di bit. 
Se consideri che queste maschere potrebbero contenere migliaia di colonne, 
le operazioni da farci sopra devono essere rapide.
Se te o qualcun'altro del newsgroup riesce ad andare avanti su questa 
strada, ben venga.


 Grazie per adesso
prego :-)
se vuoi quardare altri metodi che possono risolvere il problema dei
sottoinsiemi prova a guardare qui.
----
http://www.google.it/groups?threadm=L9Dud.280371$b5.13...@news3.tin.it
----
Ciao Giorgio