2014-04-27 59 views
0

給出MySQL數據庫中的兩個簡單表。用等效的EXISTS()查詢替換IN()子查詢

  • 產物(具有屬性,PROD_ID,PROD_NAME ...)
  • product_image(具有屬性,product_image_id,PROD_ID(引用在產品表PROD_ID),prod_image ...)

的這些表格之間的關係很直觀 - 一對多從productproduct_image


我需要檢索從product_image表具有最大product_image_id各組產品的結果集(僅prod_image)。

下面的查詢確實如此。

SELECT p.prod_image 
FROM product_image p 
WHERE p.product_image_id IN(SELECT max(pp.product_image_id) 
          FROM product_image pp 
          GROUP BY pp.prod_id) 

如何使用EXISTS()重寫此查詢?

+0

你確定發佈的查詢返回你所需要的嗎? 'IN'中的子查詢返回'prod_id'的不同值... – a1ex07

+0

考慮將正確的DDL(和/或sqlfiddle)與期望的結果集一起提供 - 或者是否存在賦值的特定部分? – Strawberry

+0

IN()'查詢(如此)在ORM中不正確生成。因此,我正在尋找替代品(聯合並不總是替代品)。沒有任務。 – Tiny

回答

1

下面的查詢遵循您的問題的邏輯,即爲每個prod_id獲取最大prod_image_id

SELECT p1.prod_image 
FROM product_image p1 
WHERE NOT EXISTS(SELECT 1 
        FROM product_image p2 
        WHERE p1.prod_id = p2.prod_id 
         AND p1.product_image_id < p2.product_image_id) 
+0

對不起,這個問題是不正確的構造。 – Tiny