MySQL JOIN ON,如果列x不为null,否则为y列

时间:2013-12-02 21:51:52

标签: mysql sql

我想加入我的产品表,同时接受订单。

我有一个orders.product_id,它总是有值。

但是,如果orders.bproduct_id不为空,我们应该使用此产品ID而不是

->join('products')->on('products.id', '=', 'dealsite_orders.product_id')

(我正在使用Kohana查询生成器,但我接受查询答案)

我该怎么做?

当我这样做时:

JOIN ON COALESCE(orders.bproduct_id,product_id)

它不会返回任何行。调查后我发现了,因为它从bproduct_id获取列值,即使它是0?

1 个答案:

答案 0 :(得分:1)

您正在寻找的on表达式是这样的:

on products.id = coalesce(dealsite_orders.product_id, orders.product_id)

coalesce()函数返回列列表中非空的第一个值。我不确定您是否要在dealsite列或products列上使用此功能。

请注意,使用coalesce()可能会阻止使用索引。如果表很大,您可能需要重新制定查询以利用索引。