一种方法假设你要总是返回相同的主产品集...
SELECT coalescce(B.market,A.Market) as Market
, coalesce(B.product_Id, A.Product_ID) as Product_ID
, coalesce(B.priority, A.Priority) as Priority
FROM table A
LEFT JOIN table B
on A.Product_ID = B.Product_ID
and A.Market is null
WHERE B.Market = 'DE'
market - product_id - priority
DE - 101 - 2
DE - 103 - 1
DE - 201 - 3
由于DE表存在,聚结,确保返回的值在B表。
如果产品存在于NULL中但不在市场 中,则返回具有该product_Id和来自A的优先级的NULL市场。
如市场对美国“..
NULL - 201 - 2
US - 101 - 1
US - 103 - 2
这可能是也可能不是你追求的。因为它会为市场返回额外的产品。
但是,如果在没有定义市场的市场存在的情况下,您是在空市场之后,那么需要采用不同的方法。
由于我们无法比较NULL值(NULL = 'DE'
)不起作用,因此null值导致一些挑战。因此,如果我们将NULL值转换为我们可以比较的值,那么这将成为一个简单的where子句评估。所以这个假设'#$'永远不会显示为市场价值。尽管这很不方便。
检测过
SQL FIDDLE ES
SQL FIDDLE US
Select *
from table
where coalesce(market,'#$') =
case when (Select count(*)
from table
where market = 'ES') > 0 then 'ES' else '#$' end
所以我能想到的最干净的方法是先简单检查“期望市场”的计数,如果0,那么where子句是一个过程如果不是0则为空,那么where子句使用所提供的“期望市场”价值。如果不是空的话,我就不需要补一个价值,也不会觉得自己有点ha。。
为什么不使用WHERE market ='DE',我没有得到确切的问题 –
换句话说,你总是想要返回所有不同的产品和它们的优先级,但是当市场上没有产品时定义,您想要使用来自市场的默认产品和优先级。 – xQbert
我总是问某个市场。对于DE,优先级被定义。例如,当我使用'ES'时,查询应该返回market = null(默认值)的条目。通常我使用'WHERE col ='xy'或者col IS NULL ORDER BY col DESC LIMIT 1',但它仅适用于每个值'col'只有一行的表格。在这种情况下,每个市场的行数可能不同。 – naptoon