2009-12-04 7 views
0

J'ai deux tables:instruction Select en utilisant WHERE x IN (SELECT ...)

[ product_to_category 
--------------------- 
product_id 
category_id 


[ category 
--------------------- 
category_id 
parent_id 

Je dois obtenir tous les années Product_ID avec un category.parent_id de '39'. Voici ce que je suis en train, mais il est vide retournais quand il y a au moins quelques centaines:

SELECT 
product_id 
FROM 
product_to_category 
WHERE 
category_id IN (
SELECT parent_id FROM category WHERE parent_id = '39' 
) 

Est-ce que je suis en train de faire ici possible?

+0

Pour référence: http://stackoverflow.com/questions/1772609/procedurally-transform-subquery-into-join –

Répondre

6

Got it:

SELECT product_id DE INNER JOIN product_to_category catégorie ON product_to_category.category_id = category.category_id ET category.parent_id = 39

+1

d'une manière générale, des jointures plus vite que les sous-requêtes de toute façon .. – steve

0
select product_id from product_to_category as ptc 
inner join category as c 
    on ptc.category_id = c.parent_id 
where c.parent_id = 39 
2

Essayez cette :

SELECT product_id 
FROM product_to_category p2c 
    Join category c 
     On c.category_id = p2c.category_id 
Where parent_id = '39' 

Que faisiez-vous pas dans votre requête était:

SELECT product_id 
FROM product_to_category 
WHERE category_id IN 
    (SELECT category_id -- THIS IS WHERE YOUR SQL WAS INCORRECT 
     FROM category WHERE parent_id = '39') 
Questions connexes