MySQL

2014-11-06 7 views
0

의 반환 결과에서 가치 제외 나는 문제가있어서 대답을 찾지 못했습니다. 내 Java 프로세스 중에 MySql 테이블을 쿼리하고 내 쿼리 반환 일부 행을 제외하고 싶습니다. 여기 MySQL

쿼리입니다 :

SELECT 
    o.offer_id, 
    o.external_cat, 
    o.cat, 
    o.shop, 
    o.item_id, 
    oa.value 
FROM 
    offer AS o, 
    offerattributes AS oa 
WHERE 
    o.offer_id = oa.offer_id 
     AND (cat = 1200000 OR cat = 12050200 
      OR cat = 13020304 
      OR cat = 3041400 
      OR cat = 3041402) 
     AND (oa.attribute_id = 'status_live_unattached_pregen' 
      OR oa.attribute_id = 'status_live_attached_pregen' 
      OR oa.attribute_id = 'status_dead_offer_getter' 
      OR oa.attribute_id = 'most_recent_status') 
     AND (oa.value = 'OK' 
      OR oa.value='status_live_unattached_pregen' 
      OR oa.value='status_live_attached_pregen' 
      OR oa.value='status_dead_offer_getter') 

여기에서의 트릭 내 프로세스를 계속하기 위해 'OK'로 값을 필요로하지만, 나는 그것의 응답을 반환하는 MySQL의를 필요가 없다는 것입니다, 난 단지 다른 값을 반환해야합니다. 그 순간에 'OK'값을 가진 쿼리와 다른 값을 가진 쿼리가 반환됩니다. 내 쿼리에 대한

'000005261383370', '10020578', '1200000', '562', '1000000_157795705', 'status_live_attached_pregen' 

을하지만, 반환 :

내가 이렇게 될 반환 값을 원하는

'000005261383370', '10020578', '1200000', '562', '1000000_157795705', 'OK' 
'000005261383370', '10020578', '1200000', '562', '1000000_157795705', 'status_live_attached_pregen' 

도움 정말 감사하겠습니다.

감사합니다.

+0

'oa.value'가'OK '인 행을 반환하려면'oa.value' 행이 'OK'입니까? – mainstreetmark

+0

'oa.attribute_id'가 'status_live_unattached_pregen', 'status_live_attached_pregen', 'status_dead_offer_getter'와 같을 때 값이 'OK'인지 확인하기 위해 MySql이 필요하며 'oa.attribute_id'가 같을 때 값을 반환해야합니다. 'most_recent_status' – Oscar

답변

1

당신은 자신에 INNER JOIN으로이 문제를 해결 할 수 있습니다 내 생각 :

SELECT o.offer_id 
    ,o.external_cat 
    ,o.cat 
    ,o.shop 
    ,o.item_id 
    ,oa.value 
FROM offer AS o 
INNER JOIN offerattributes AS oa 
    ON o.offer_id = oa.offer_id 
INNER JOIN offerattributes AS oaOK 
    ON oaOK.offer_id = oa.offer_id 
     AND oaOK.value = 'OK' 
WHERE o.cat IN (1200000,12050200,13020304,3041400,3041402) 
    AND oa.attribute_id IN ('status_live_unattached_pregen','status_live_attached_pregen','status_dead_offer_getter','most_recent_status') 
    AND oa.value IN ('status_live_unattached_pregen','status_live_attached_pregen','status_dead_offer_getter'); 

OK의 제한으로 자기 JOIN을함으로써, 그것은 OKoffer_id의 결과 집합을 제한합니다 응답이지만 WHERE 절은 여전히 ​​필요한 값을 검색합니다. 귀하의 설명에 따라, 나는 이것이 당신이 찾고있는 것이라고 생각합니다.

는 또한 명시 적 INNER JOIN에 암시 크로스 JOIN 변환뿐만 아니라,이 방법이 더 확대됨에 있어야 INOR의 변경.

+0

고마워요, 그건 완전히 트릭을 했어! <3 – Oscar