category_product
---------------
id_category
id_product
product
---------------
id_product
id_manufacturer
manufacturer
---------------
id_manufacturer
name
如何創建SQL查詢,以便在id_category等於某個值時從製造商選擇所有名稱?SQL多對多選擇
category_product
---------------
id_category
id_product
product
---------------
id_product
id_manufacturer
manufacturer
---------------
id_manufacturer
name
如何創建SQL查詢,以便在id_category等於某個值時從製造商選擇所有名稱?SQL多對多選擇
這是一個簡單的內部連接的表:
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'
嘗試像
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>
查詢,而不加入將類似於以下內容:
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
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 = ?))
我知道這似乎是一種不同的方法,但在給定大表的情況下,這樣的查詢的性能將*可怕* ... – 2010-08-15 08:15:15
不,在90%的情況下子查詢比加入更好 – 2010-08-15 08:23:13
而且您有證據(案例研究,鏈接)這種說法? X-) – 2010-08-15 08:30:48
類似的問題(有很多方法可以做到這一點):[如何過濾SQL結果在一個有很多通過關係](http://stackoverflow.com/questions/7364969/how-to-filter-sql-results-in-a-has-many-through-relation) – Bukov 2013-02-08 06:53:24