2013-02-16 69 views
0

我有一個表禮物。禮品可以通過表格關聯有許多gift_images。我正在嘗試返回一個具有至少一個gift_images關聯的特定隱私級別的有限#禮物。postgresql查詢加入並限制

實質上,我想返回:禮品條目與其關聯的第一個gift_image(gift_image應該按照其具有的位置值排序,其中位置1是第一個)。沒有gift_image關聯的禮物應該被忽略。

這是我的,但它絕對不能工作。

SELECT gifts.* FROM gifts LEFT JOIN gift_images ON gifts.id = gift_images.gift_id WHERE gifts.privacy = 2 ORDER BY gift_images.position ASC LIMIT 10 

任何幫助?

回答

0

如果你想忽略沒有圖像的禮物,你應該使用INNER JOIN而不是LEFT JOIN。另外,爲了使查詢有意義,您應該從gift_images中選擇一些字段以及來自禮物的字段。

如果有禮物圖像的所有禮物有哪個位置= 1的圖像,此查詢應該這樣做:

SELECT gifts.*, gift_images.* 
FROM gifts 
INNER JOIN gift_images 
ON gifts.id = gift_images.gift_id 
WHERE gifts.privacy = 2 
AND gift_images.position = 1 
LIMIT 10 

否則,你可以嘗試

SELECT gifts.*, gift_images.* 
FROM gifts 
INNER JOIN (SELECT gift_id, MIN(position) AS min_position 
      FROM gift_images 
      GROUP BY gift_id) AS positions 
ON positions.gift_id = gifts.id 
INNER JOIN gift_images 
ON gift_images.gift_id = gifts.id 
AND gift_images.position = positions.min_position