2010-12-30 2 views
0

을 얻는 모든 값에 대해 select 쿼리는 별도의 행을 표시해야하지만이 쿼리를 실행하면 IN 절에 사용 된 하위 쿼리의 첫 번째 값만 생성됩니다.아래의 쿼리는 나에게 기대되는 결과를주지 않는다.

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

하위 쿼리는 쉼표로 값

을 구분 산출

누군가가 나에게 이것의 해결책을 찾기 위해 나를 도울 수 있을까요?

+0

당신이 게시하시기 바랍니다 수있다 당신의 테이블 정의? –

+0

rel_prod_ids 유형은 무엇입니까? 그리고 하위 쿼리를 단독으로 실행하는 경우 반환 값은 무엇입니까? –

+0

@Haim it yeilds me CSV –

답변

1

JOIN

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

이 기능은 매우 느리고 성능을 통해 조심 find_in_set ...

1

사용하는 대신 당신이 필요로하는 무엇 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

하위 쿼리에서 CSV를 얻을 수 있으므로 JOIN을 사용하지 마십시오. JOIN –

+0

귀하의 의견은 왜 조인을 사용할 수 없는지 설명하지 않습니다.이 조인 쿼리는 훌륭하게 보입니다. – regilero