SQL完全加入if ... else

时间:2014-10-29 14:23:17

标签: sql if-statement

我的查询的一部分如下所示:

...
FULL JOIN [tbl_ad] as ad
ON [name] = ad.[firstName] + '', '' + ad.[lastName]
...

[name]总是这样(虚构的名字):

Brian, Vines
Michael, Bartels
Timothy, Gilcrease 

组合广告。[firstName] +'',''+ ad。[lastName]将返回相同的内容:

Brian, Vines
Michael, Bartels
Timothy, Gilcrease 

所以现在我有一个包含300个用户的列表,其中有一个用户会导致问题,因为它没有返回相同的值,因为他在两个表中都没有相同的名称。

作为[姓名],她有

"Chloe, Jones"

但ad。[firstName] +'',''+ ad。[lastName]的组合是

"Chloë, Jones"

你看:e<> ë

这就是为什么我想在我的查询中使用if,只是为了这个例外...任何想法?

我想到这样的事情:

...
FULL JOIN [tbl_ad] as ad
ON [name] = if [name] == 'Chloe, Jones' 
                'Chloë, Jones'
            else
                ad.[firstName] + '', '' + ad.[lastName]
...

或者这是不可能的?

2 个答案:

答案 0 :(得分:1)

您可以将两个比较表达式的排序规则更改为重音不敏感,这样不仅Chloe /Chloë,而且任何其他类似的情况都适合您。

为此,您只需在所选列名称后面添加COLLATE规范。 See COLLATE docs。例如:

ON [name] COLLATE Latin1_General_100_CI_AI
   = ad.[firstName] + ''  , '' + ad.[lastName] COLLATE Latin1_General_100_CI_AI

注意:此示例不区分大小写,不区分重音

如果你想使用“IF”方式,你只需要添加一个OR表达式来检查两个组合字段是否都像你喜欢的那样:

ON [name] = ad.[firstName] + '', '' + ad.[lastName]
  OR ([name] = 'Chloe, Jones' 
      AND ad.[firstName] + '', '' + ad.[lastName] = 'Chloë, Jones')

答案 1 :(得分:0)

您可以尝试CASE(许多RDBMS支持)

ON CASE WHEN [name] = 'Chloe, Jones' THEN 'Chloë, Jones' ELSE [name] END 
   = ad.[firstName] + ', ' + ad.[lastName]