我有两张桌子
表A - 产品信息 - 颜色,尺寸等......(product_id,颜色,尺寸......)
表B - 费率信息 - 费率可能因颜色,大小,州等而异...... (rate_id,product_id,颜色,大小,状态,费率)
并非所有产品的费率都会因颜色,大小,状态等而异......这会按产品更改
如果是这种情况,只有费率变化的属性在费率表中有一个值 例如如果产品X费率不随大小或状态而变化,但因颜色而异,则费率表中的条目将使用不同的颜色值,但大小,状态字段将为空。
SQL中是否有办法为产品获取正确的价值 - 我无法匹配所有产品属性,因为可能没有匹配的行
我想要的是一个查询,它可以获得与产品X相关联的费率,并且可以用于其费率可能因不同属性集而异的其他产品。
答案 0 :(得分:3)
您想要了解的有关该主题的所有内容,以及更多内容:Dynamic Search Conditions in T-SQL。
答案 1 :(得分:2)
这就是我实现它的方式
http://www.sqlteam.com/article/implementing-a-dynamic-where-clause
这里有一个非常好的解释 http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/
菲尔
答案 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子句。