2010-08-15 23 views
20
category_product 
--------------- 
id_category 
id_product 

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

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

मैं SQL क्वेरी कैसे बनाऊंगा ताकि यह निर्माता से सभी नामों का चयन करे जब id_category किसी चीज़ के बराबर हो? जैसेएसक्यूएल कई लोगों को चुनने के लिए कई

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> 
+1

इसी प्रकार के प्रश्न (ऐसा करने के कई तरीके हैं): [कैसे फ़िल्टर करें आर एसक्यूएल के परिणामस्वरूप कई-से-संबंध संबंध हैं] (http://stackoverflow.com/questions/7364969/how-to-filter-sql-results-in-a-has-many-through-relation) – Bukov

उत्तर

0

कोशिश कुछ यह तालिकाओं का एक सीधा भीतरी में शामिल होने है:

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' 
9

क्वेरी बिना मिलती निम्नलिखित तरह दिखेगा:

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 
2
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 = ?)) 
+0

मुझे पता है यह एक अलग दृष्टिकोण की तरह लगता है, लेकिन बड़ी तालिका के अनुसार, इस तरह की एक क्वेरी पर प्रदर्शन * भयानक * होगा ... –

+1

नहीं, 90% मामलों में –

+3

में शामिल होने से बेहतर सबक्वायरी है और आपके पास प्रमाण (केस स्टडीज, लिंक) इस कथन का? एक्स-) –

संबंधित मुद्दे