Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Efficienza intersezione query

    Ciao a tutti, ho due tabelle relazionate in forma "molti a molti", “ingrediente” e “ricetta”.
    Esiste quindi una terza tabella che funge da collegamento tra le due tabelle, “ingredientericetta”.
    Per entrare più nel dettaglio ho qualcosa del genere:
    ingrediente
    ID (primary key) …..ALTRI CAMPI

    ricetta
    ID (primary key) …..ALTRI CAMPI

    Ingredientericetta
    ID_ingrediente foreign key references ingrediente (id) ID_RICETTA foreign key references ricetta(id)

    Il mio intento è quello di ricercare tutte le ricette che hanno tutti gli ingredienti presenti in un insieme. La mia idea per svolgere ciò eè quella di costruire una query dinamicamente facendo l'intersezione in serie delle singole query, cioè facendo un qualcosa del genere:
    ho un insieme di ingredienti del tipo:
    {ingr1, ingr2, ... ,ingrn}
    Quindi per ottenere le ricette che hanno tutti gli ingredienti faccio qualcosa del genere
    select id_ricetta from ingredienteRricetta where id_ingrediente=ingr1
    INTERSECT
    select id_ricetta from ingredienteRricetta where id_ingrediente=ingr2
    INTERSECT
    ...
    INTERSECT
    select id_ricetta from ingredienteRricetta where id_ingrediente=ingrn

    Essendo una procedura piuttosto elaborata, mi preoccupano per le performance nel caso di un gran numero di ingredienti...
    Esiste secondo voi un modo migliore e più efficiente di fare questa cosa?

  2. #2
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    SELECT * FROM Ricetta inner join RicettaIngradiente ON Ricetta.ID_Ricetta = RicettaIngradiente.ID_Ricetta
    WHERE RicettaIngradiente.id_ingrediente IN (ingr1,ingr2,ingr3)

    La parte pesante in questa query è la clusola IN

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.