可选的where子句

时间:2011-05-11 17:57:05

标签: sql sql-server

我有两张桌子

表A - 产品信息 - 颜色,尺寸等......(product_id,颜色,尺寸......)

表B - 费率信息 - 费率可能因颜色,大小,州等而异...... (rate_id,product_id,颜色,大小,状态,费率)

并非所有产品的费率都会因颜色,大小,状态等而异......这会按产品更改

如果是这种情况,只有费率变化的属性在费率表中有一个值 例如如果产品X费率不随大小或状态而变化,但因颜色而异,则费率表中的条目将使用不同的颜色值,但大小,状态字段将为空。

SQL中是否有办法为产品获取正确的价值 - 我无法匹配所有产品属性,因为可能没有匹配的行

我想要的是一个查询,它可以获得与产品X相关联的费率,并且可以用于其费率可能因不同属性集而异的其他产品。

4 个答案:

答案 0 :(得分:3)

您想要了解的有关该主题的所有内容,以及更多内容:Dynamic Search Conditions in T-SQL

答案 1 :(得分:2)

答案 2 :(得分:0)

您可以使用带有ISNULL(product.color, 'n/a') = ISNULL(rate.color, ISNULL(product.color, 'n/a'))技巧的静态SQL执行此操作。

答案 3 :(得分: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子句。