SQL da molti a molti, selezionare

category_product
---------------
id_category
id_product

product
---------------
id_product
id_manufacturer

manufacturer
---------------
id_manufacturer
name

Come posso creare una query SQL in modo che seleziona tutti i nomi del produttore quando id_category è uguale a qualcosa?

InformationsquelleAutor Ken | 2010-08-15



5 Replies
  1. 37

    È un semplice inner join delle tabelle:

    SELECT m.name, cp.id_category
    FROM manufacturer as m
    INNER JOIN product as p
        ON m.id_manufacturer = p.id_manufacturer
    INNER JOIN category_product as cp
        ON p.id_product = cp.id_product
    WHERE cp.id_category = 'some value'
  2. 13

    Query senza unisce apparirà come segue :

    SELECT m.name 
    FROM manufacturer as m, product as p, category_product as cp 
    WHERE cp.id_category = <your value>
          AND cp.id_product = p.id_product 
          AND p.id_manufacturer = m.id_manufacturer 
  3. 4
    Select M.name
    From   manufacturer M
    Where  M.id_manufacturer in ( Select P.id_manufacturer
                                  From   product P
                                  Where  P.id_product in ( Select C.id_product
                                                           From   category_product C
                                                           Where  C.id_category = ?))
    • So che questo sembra un approccio diverso, ma le prestazioni su una query di questo tipo, dato tabelle di grandi dimensioni, sarà orribile
    • No, nel 90% dei casi sottoquery di meglio che unire
    • E si dispone di una prova (studi di caso, i link) di questa affermazione? X-)
  4. 0

    Provare qualcosa di come

    SELECT  m.*
    FROM      category_product cp INNER JOIN
               product p ON cp.id_product = p.id_product INNER JOIN
               manufacturer m ON p.id_manufacturer = m.id_manufacturer
    WHERE      cp.id_category = <your_value>
  5. 0
    SELECT m.name, cp.id_category
    FROM manufacturer AS M INNER JOIN product AS P
        ON M.id_manufacturer = M.id_manufacturer
     INNER JOIN category_product AS CP
        ON P.id_product = CP.id_product 
    WHERE cp.id_category = 'add value'
    • Si può formattare il codice in un blocco di codice (4 spazi a sinistra di ogni riga di codice) e aggiungere qualche spiegazione per il codice?
    • Grazie per la tua risposta, però io non credo che sia particolarmente utile per rispondere a un 8-anno-vecchia questione che ha già parecchie buone risposte (uno di loro anche di essere accettato).

Lascia un commento