Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 可选where子句_Sql_Sql Server - Fatal编程技术网

Sql 可选where子句

Sql 可选where子句,sql,sql-server,Sql,Sql Server,我有两张桌子 表A-产品信息-颜色、尺寸等(产品id、颜色、尺寸…) 表B-费率信息-费率可能因颜色、大小、状态等而异。。。 (费率id、产品id、颜色、尺寸、状态、费率) 并非所有产品的价格都会因颜色、尺寸、状态等的不同而变化。这会因产品而异 如果是这种情况,则只有比率变化的属性在比率表中才有值 e、 g.如果产品X速率不因大小或状态而变化,而是因颜色而变化,则速率表中的条目将具有不同的颜色值,但大小、状态字段将为空 SQL中是否有方法为产品获取正确的速率值 -我无法匹配所有产品属性,因为可能

我有两张桌子

表A-产品信息-颜色、尺寸等(产品id、颜色、尺寸…)

表B-费率信息-费率可能因颜色、大小、状态等而异。。。 (费率id、产品id、颜色、尺寸、状态、费率)

并非所有产品的价格都会因颜色、尺寸、状态等的不同而变化。这会因产品而异

如果是这种情况,则只有比率变化的属性在比率表中才有值 e、 g.如果产品X速率不因大小或状态而变化,而是因颜色而变化,则速率表中的条目将具有不同的颜色值,但大小、状态字段将为空

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


我想要的是一个查询,它获取与产品X关联的速率,并将用于其他产品,这些产品的速率可能因不同的属性集而异

这就是我将如何实现它的方法

这是一个很好的解释


菲尔

这就是我将如何实现它的方法

这是一个很好的解释


Phil

你想知道的关于主题的一切,还有更多:。

你想知道的关于主题的一切,还有更多:。

你可以用静态SQL做这件事,技巧是
ISNULL(product.color,'n/a')=ISNULL(rate.color,ISNULL(product.color,'n/a'))

您可以使用静态SQL来实现这一点,方法是
ISNULL(product.color,'n/a')=ISNULL(rate.color,ISNULL(product.color,'n/a'))

您尝试过外部联接吗

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子句。

是否尝试了外部联接

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 = ?

Edit:省略WHERE子句。

我认为,您最好简化模式。表A不应包含颜色或尺寸信息。对于给定的产品id,表B应始终包含一行或多行。表之间始终进行内部联接。不需要条件。同意模式肯定是“关闭”的。如果行数很小,并且表不是到处都可以使用,那么修复表结构是必须的。我认为,您最好让模式更简单。表A不应包含颜色或尺寸信息。对于给定的产品id,表B应始终包含一行或多行。表之间始终进行内部联接。不需要条件。同意模式肯定是“关闭”的。如果行数很小,并且表不是到处都使用,那么必须修复表结构。