2014-11-06 38 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 2014-11-06 16:12:10

+0

當'oa.attribute_id'等於'status_live_unattached_pregen','status_live_attached_pregen','status_dead_offer_getter'時,我需要MySql檢查值是否爲'OK',並且我需要它在'oa.attribute_id'等於時返回值'most_recent_status' – Oscar 2014-11-06 16:15:05

回答

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

做一個自我JOIN與價值OK的限制,它會限制結果設置爲offer_id S作一個OK響應,但WHERE子句仍將檢索您需要的值。根據你的描述,我認爲這就是你要找的。

我也轉換您的暗示交叉JOIN一個明確的INNER JOIN,以及改變了你的OR s到IN,應該是更高性能的這種方式。

+0

謝謝你,完全是這樣做的! <3 – Oscar 2014-11-06 16:30:16