Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 组合两个结构相同的表,其中一个表具有优先级,并按字段值排除_Sql_Sql Server_Join - Fatal编程技术网

Sql 组合两个结构相同的表,其中一个表具有优先级,并按字段值排除

Sql 组合两个结构相同的表,其中一个表具有优先级,并按字段值排除,sql,sql-server,join,Sql,Sql Server,Join,我有两张桌子,像这样: t_Normal ---------------------------------------------- FieldKey | FieldLabel | FieldValue ---------------------------------------------- greet_hw | Hello, world! | HELLOWORLD ---------------------------------------------- gree

我有两张桌子,像这样:

t_Normal ---------------------------------------------- FieldKey | FieldLabel | FieldValue ---------------------------------------------- greet_hw | Hello, world! | HELLOWORLD ---------------------------------------------- greet_ws | What's shakin? | WHATISSHAKING ---------------------------------------------- greet_hh | How's it hangin?| HOWDOESITHANG ---------------------------------------------- t_Override ------------------------------------------------------------ FieldKey | FieldLabel | FieldValue | FieldStatus ------------------------------------------------------------ greet_ws | What's shakin? | WHATISSHAKING | Retired ------------------------------------------------------------ greet_s | Sup!?!?? | SUPELEVEN | Active ------------------------------------------------------------ greet_hh | How swings it? | HOWDOESITHANG | Active ------------------------------------------------------------ t_正常 ---------------------------------------------- 字段键|字段标签|字段值 ---------------------------------------------- 问候|你好,世界!|地狱世界 ---------------------------------------------- 问候“沙金是什么?”什么事 ---------------------------------------------- 你好吗 ---------------------------------------------- 超控 ------------------------------------------------------------ 字段键|字段标签|字段值|字段状态 ------------------------------------------------------------ 问候“沙金是什么?”什么是退休 ------------------------------------------------------------ 欢迎光临SUPELEVEN |活动 ------------------------------------------------------------ 问候|hh |它如何摆动?|如何激活 ------------------------------------------------------------ 我是否可以加入他们以获得以下信息:

v_FieldMaster --------------------------------------------- FieldKey | FieldLabel | FieldValue --------------------------------------------- greet_hw | Hello, world! | HELLOWORLD --------------------------------------------- greet_s | Sup!?!?? | SUPELEVEN --------------------------------------------- greet_hh | How swings it? | HOWDOESITHANG --------------------------------------------- 沃夫·菲尔德马斯特 --------------------------------------------- 字段键|字段标签|字段值 --------------------------------------------- 问候|你好,世界!|地狱世界 --------------------------------------------- 欢迎光临超级十一 --------------------------------------------- 问候|hh |它如何摆动?|西塘怎么样 --------------------------------------------- 因此,它联合起来生产了v_FieldMaster,如下所示:

t_Normal ---------------------------------------------- FieldKey | FieldLabel | FieldValue ---------------------------------------------- greet_hw | Hello, world! | HELLOWORLD ---------------------------------------------- greet_ws | What's shakin? | WHATISSHAKING ---------------------------------------------- greet_hh | How's it hangin?| HOWDOESITHANG ---------------------------------------------- t_Override ------------------------------------------------------------ FieldKey | FieldLabel | FieldValue | FieldStatus ------------------------------------------------------------ greet_ws | What's shakin? | WHATISSHAKING | Retired ------------------------------------------------------------ greet_s | Sup!?!?? | SUPELEVEN | Active ------------------------------------------------------------ greet_hh | How swings it? | HOWDOESITHANG | Active ------------------------------------------------------------
  • 包括任何完全不同的表行(其中比较基于FieldKey和FieldValue的组合)。你好,世界!仅出现在t_Normal和Sup!?!??仅出现在t_覆盖中
  • 基于名称和值匹配的任何行都采用t_Override表的标签字段。例如,它是如何摆动的?而不是它是如何保持的
  • 在这两个选项(或仅t_Override)中出现但在t_Override中设置为Status=Retired的任何行都不会出现。例如,什么在摇晃?没有出现

  • 在这方面我已经做了一部分,但我还没有弄清楚如何将该技术与t_Override.FieldStatus上匹配的where子句相结合。欢迎任何建议

    执行完全联接,但仅选择没有覆盖或覆盖处于“活动”状态的行。合并每个字段以确定覆盖值(如果存在)的优先级

    SELECT 
      COALESCE(o.FieldKey   ,n.FieldKey   ) AS FieldKey   ,
      COALESCE(o.FieldLabel ,n.FieldLabel ) AS FieldLabel ,
      COALESCE(o.FieldStatus,n.FieldStatus) AS FieldStatus
    FROM t_Normal n
    FULL JOIN t_Override o ON (o.FieldKey = n.FieldKey)
    WHERE (o.FieldKey IS NULL OR o.FieldStatus = 'Active')
    

    这看起来很棒,但似乎还不太管用:)如果t_Normal表为空,t_Override的内容还会填充视图吗?喜欢吃苏打!?!??实际上,我发现如果我删除WHERE子句,那么我就会得到结果。我正在将其设置为o.FieldStatus!='我已经意识到我的问题是——我是个白痴。我忘了提到一个关键的信息,那就是FieldKey可以重复(这是用于填充下拉列表)。有鉴于此,WHERE子句非常有效。唯一剩下的是,如果我将状态检查反转为o.FieldKey为NULL,o.Status为NULL或o.Status!='退休了,没用了。知道为什么吗?因为我颠倒了一些东西,使得这个查询没有意义,我知道,但是有可能以某种方式将这个逻辑表达为否定的吗?