2014-04-27 58 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