2014-10-29 57 views
1

我有一個查詢以返回圖像名,其是在所述目標ID中的一個1,2或3查詢與IN操作者的相反功能

SELECT AI.ACCESSORY_IMAGE_NAME, P.PART_CODE, PT.PUBLISHED_TARGET_ID, PT.TARGET_NAME FROM ASS.ACCESSORY_IMAGE AI 
JOIN PUB.PUBLISHED_ITEM PI ON PI.PUBLISHED_OBJECT_ID = AI.ACCESSORY_IMAGE_ID and PI.PUBLISHED_OBJECT_TYPE = 'ACCESSORY_IMAGE' 
JOIN PRD.ACCESSORY A ON A.ACCESSORY_ID = AI.ACCESSORY_ID 
JOIN PRD.PART P ON P.PART_ID = A.PART_ID 
JOIN PUB.PUBLISHED_TARGET PT ON PI.PUBLISHED_TARGET_ID = PT.PUBLISHED_TARGET_ID AND PT.PUBLISHED_TARGET_ID in (1,2,3) 
WHERE AI.ACCESSORY_IMAGE_NAME = 'fire_ext.jpg' 

作爲圖像發表在目標ID返回1

ACCESSORY_IMAGE_NAME PART_CODE   PUBLISHED_TARGET_ID  TARGET_NAME 
------------------------------------------------------------------------------- 
fire_ext.jpg   PZ4AC-00EF0-EU  1      DEALER_ACCESS 

但我想返回圖像未發佈的目標。在這種情況下,2和3

預計輸出

ACCESSORY_IMAGE_NAME PART_CODE   PUBLISHED_TARGET_ID  TARGET_NAME 
------------------------------------------------------------------------------- 
fire_ext.jpg   PZ4AC-00EF0-EU  2      INTERNET 
fire_ext.jpg   PZ4AC-00EF0-EU  3      INTRANET 

的 「NOT IN」 操作不很明顯的圖像被刊登在目標1

+1

通過哪一列你知道圖像是否被髮布?我的意思是你如何決定該圖像是否發佈? – Dhwani 2014-10-29 12:32:27

+0

如果條目存在於PUBLISHED_TARGET中,則表示它已發佈。 – Techie 2014-10-29 12:54:02

+0

你的意思是如果PUBLISHED_TARGET_ID = NULL,它不是正確的發佈? – Dhwani 2014-10-29 12:58:34

回答

0

簡單地改變返回任何行最後加入到

JOIN PUB.PUBLISHED_TARGET PT ON PI.PUBLISHED_TARGET_ID <> PT.PUBLISHED_TARGET_ID 
+0

謝謝,它的工作 – Techie 2014-10-29 12:58:25

+1

@Techie。 。 。如果這真的起作用,我會非常驚訝。 – 2014-10-29 13:00:00

+0

@GordonLinoff我也很驚訝。導致他的問題不夠清楚。 – Dhwani 2014-10-29 13:02:07

1

我不確定「發佈」是什麼意思。如果這意味着在published_target表之中,然後用left join,並檢查是否有匹配:

SELECT AI.ACCESSORY_IMAGE_NAME, P.PART_CODE, PT.PUBLISHED_TARGET_ID, PT.TARGET_NAME FROM ASS.ACCESSORY_IMAGE AI 
JOIN PUB.PUBLISHED_ITEM PI ON PI.PUBLISHED_OBJECT_ID = AI.ACCESSORY_IMAGE_ID and PI.PUBLISHED_OBJECT_TYPE = 'ACCESSORY_IMAGE' 
JOIN PRD.ACCESSORY A ON A.ACCESSORY_ID = AI.ACCESSORY_ID 
JOIN PRD.PART P ON P.PART_ID = A.PART_ID 
LEFT JOIN PUB.PUBLISHED_TARGET PT ON PI.PUBLISHED_TARGET_ID = PT.PUBLISHED_TARGET_ID AND PT.PUBLISHED_TARGET_ID in (1,2,3) 
WHERE AI.ACCESSORY_IMAGE_NAME = 'fire_ext.jpg' and PT.PUBLISHED_TARGET_ID IS NULL; 

同樣的想法將舉行任何表。

+0

嗨戈登,感謝您的迴應,我曾嘗試過,但PT.PUBLISHED_TARGET_ID是一個非空列。所以它不起作用。 – Techie 2014-10-29 13:09:19

+0

嗨戈登,是否有任何方式實現結果,而不使用「<>」運算符? – Techie 2014-10-29 13:13:29

+0

@Techie。 。 。作爲'非空'列對此查詢沒有影響。 'NULL'將是不匹配的結果 - 這似乎是你想要的。 – 2014-10-30 03:02:01