用等效的EXISTS()查询替换IN()子查询

时间:2014-04-27 23:53:30

标签: mysql sql exists

在MySQL数据库中给出两个简单的表。

  • 产品(具有属性,prod_id,prod_name ......)
  • product_image(具有属性,product_image_id,prod_id(在产品表中引用prod_id),prod_image ...)

这些表格之间的关系直观 - 从productproduct_image一对多。


我需要从prod_image表中检索结果集(仅product_image),每个产品 {<1}}。

以下查询正是如此。

product_image_id

如何使用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) 重写此查询?

1 个答案:

答案 0 :(得分:1)

以下查询遵循您的问题的逻辑,即为每个prod_image_id获取最大prod_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)