内部连接仅将条件应用于一个表

时间:2014-11-21 13:44:08

标签: mysqli inner-join

这是我的问题:

SELECT p.product_id,p.title,p.price,p.total_sales,p.total_revenue,p.timestamp,i.image_id
FROM products AS p
INNER JOIN products_images AS i
ON p.product_id = i.product_id
WHERE p.account_id = ? AND p.deleted=0 AND i.featured=1

我想获得i.image_id WHERE i.featured = 1但我不知道如何应用该条件以便它仅适用于images表。查询有效,但我没有从products表中获得所有结果,只有一行。

显然在某些情况下,如果feature = 1,可能没有image_id可用。因此,在这种情况下,它必须吐出其他东西。

2 个答案:

答案 0 :(得分:1)

将其更改为

FROM products AS p
left outer join products_images AS i
ON p.product_id = i.product_id
AND i.featured=1
WHERE p.account_id = ? AND p.deleted=0"))

答案 1 :(得分:1)

使用LEFT JOIN,即使没有图像,您也会获得结果。你会发现每一张图片都有一行。如果不合适,请使用GROUP BY p.product_id来获取每个产品一次。

是的,将AND i.featured=1条件置于ON语句中,如@Abercrombieande所述。