Sql 组合两个结构相同的表,其中一个表具有优先级,并按字段值排除
我有两张桌子,像这样: 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 ------------------------------------------------------------Sql 组合两个结构相同的表,其中一个表具有优先级,并按字段值排除,sql,sql-server,join,Sql,Sql Server,Join,我有两张桌子,像这样: t_Normal ---------------------------------------------- FieldKey | FieldLabel | FieldValue ---------------------------------------------- greet_hw | Hello, world! | HELLOWORLD ---------------------------------------------- gree
在这方面我已经做了一部分,但我还没有弄清楚如何将该技术与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!='退休了,没用了。知道为什么吗?因为我颠倒了一些东西,使得这个查询没有意义,我知道,但是有可能以某种方式将这个逻辑表达为否定的吗?