2010-12-30 2 views
0

La requête select doit afficher une ligne distincte pour chaque valeur qu'il obtient mais en exécutant cette requête, il ne donne que la première valeur de la sous-requête utilisée dans la clause IN.La requête ci-dessous ne me donne pas le résultat attendu s'il vous plaît aidez-moi

SELECT prod_id FROM tbl_product WHERE tbl_product.prod_status = 1 AND 
tbl_product.is_excluded = 0 AND tbl_product.prod_stock_qty > 0 
AND tbl_product.prod_id IN (SELECT rel_prod_ids 
FROM tbl_product_relations WHERE prod_id = '6058') 

La sous-requête donne le

des valeurs séparées par des virgules

Quelqu'un pourrait-il me aider à me trouver la résolution de cette situation?

+0

pouvez-vous s'il vous plaît poster vos définitions de table? –

+0

quel est le type de rel_prod_ids? et si vous exécutez la sous-requête seule quel est son retour? –

+0

@Haim ça me sert CSV –

Répondre

1

Qu'est-ce que vous avez besoin est find_in_set

select find_in_set(123, '123,12345,123456'); <-- return 1 
select find_in_set(123, '1234,12345,123456'); <-- return 0 

Cette fonction est assez lent et méfiez-vous sur les performances ...

1

Utilisez un JOIN au lieu d'un IN

SELECT p.prod_id 
FROM tbl_product p JOIN tbl_product_relations pr ON p.prod_id = pr.rel_prod_ids 
WHERE p.prod_status = 1 
    AND p.is_excluded = 0 
    AND p.prod_stock_qty > 0 
    AND r.prod_id = '6058' 
+0

Je reçois le CSV de la sous-requête donc je ne peux pas utiliser JOIN –

+0

Vos commentaires n'explique pas pourquoi vous ne pouvez pas utiliser join, cette requête de jointure semble bien. – regilero

Questions connexes