2010-12-30 8 views
0

Die Select-Abfrage muss separate Zeile für jeden Wert angezeigt wird aber beim Ausführen dieser Abfrage ergibt es nur den ersten Wert von der Unterabfrage in IN-Klausel verwendet.unter Abfrage gibt mir nicht erwartet Ergebnis bitte helfen Sie mir aus

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

Die Unterabfrage liefert die Comma Werte getrennt

Könnte mir jemand helfen mir die Auflösung dieses zu finden?

+0

Sie bitte posten Ihre Tabellendefinitionen? –

+0

Was ist der Typ von rel_prod_ids? und wenn Sie die Unterabfrage alleine ausführen, was gibt es? –

+0

@Haim es Yeilds mich CSV –

Antwort

1

Was Sie brauchen, ist find_in_set

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

Diese Funktion ist ziemlich langsam und die Leistung passen über ...

1

Verwenden Sie ein JOIN anstelle eines 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

Ich bekomme die CSV von Unterabfrage, so kann ich nicht verwenden, JOIN –

+0

Ihre Kommentare nicht erklären, warum Sie Join nicht verwenden können, scheint diese Join-Abfrage nett. – regilero