2011-05-11 84 views
1

我有两个表可选的where子句

表A - 产品信息 - 颜色,大小等等......(产品编号,颜色,尺寸......)

表B - 速率信息 - 速度可能会有所不同按颜色,大小,状态等.. (rate_id,PRODUCT_ID,颜色,大小,状态,速度)

并非所有产品都通过颜色,大小,状态等变化率......这变化的产品

如果是这种情况,只有速率变化的属性有av例如在费率表 例如如果产品X率不因尺寸或状态而异,但因颜色而异,则会在费率表中输入不同颜色值,但尺寸,状态字段将为空。

是否有SQL的方式,以获得正确率值的产品 - 我不能匹配所有的产品属性,因为有可能不匹配行

我要的是一个查询,获取率与产品X相关联,并将与其他产品一起使用,其费率可能因不同的属性而异。

+0

我认为,您最好尽可能简化模式。表A不应包含颜色或尺寸信息。对于给定的product_id,表B应始终包含一行或多行。您始终在表格之间进行INNER连接。不需要条件。 – 2011-05-11 18:26:00

+0

同意该模式肯定是“关闭”。如果行数很少,并且表格不在任何地方使用,则必须修复表格结构。 – hythlodayr 2011-05-11 18:28:28

回答

0

您可以使用静态SQL与窍门ISNULL(product.color, 'n/a') = ISNULL(rate.color, ISNULL(product.color, 'n/a'))做到这一点。

0

您是否尝试过外连接?

SELECT 
    P.*, 
    R.* 
FROM 
    PRODUCT P LEFT OUTER JOIN RATE R 
    ON (P.product_ID = R.product_id AND (
     P.COLOR = R.COLOR 
    OR P.SIZE = R.SIZE 
    )) 
WHERE 
    P.product_id = ? 

编辑:遗漏了WHERE子句。