【问题标题】:SQL: Where Clause Match Fullname with First & LastNameSQL:Where子句匹配全名与名字和姓氏
【发布时间】:2016-09-08 09:51:50
【问题描述】:

我有两张桌子,我需要在上面匹配

"Fullname"

反对

 "FirstName" & "LastName"

并从 "FirstName"/"LastName" 表中提取用户 ID。 如果有匹配项,则检索 UserID(如果不为 Null)

示例: 表1(全名)

|Sam Smith|

必须与 表 2(有名字和姓氏)

| Sam | Smith |

我想考虑一个人是否有三个名字。 (全名)

 |Sam Samual Smith|

对比(名字和姓氏)

|Sam Samual | Smith |

需要任何帮助,不知道如何解决,

【问题讨论】:

  • 这不就是WHERE t1.Fullname = t2.Firstname + ' ' + t2.Lastname那么简单吗? (虽然索引可能不会很好地执行)

标签: sql-server match where-clause


【解决方案1】:

正如Lasse V. Karlsen 建议的那样,

  SELECT *
  FROM [MainTable] M
  INNER JOIN [SubTable] S
  ON M.Fullname=S.Firstname + ' ' + S.Lastname; -- check if fullname is a of combination 
                                                -- firstname and lastname from other table

用您的表名替换表名并将您想要的字段放在选择查询中,因为选择所有字段可能会影响性能。

【讨论】:

  • 谢谢,效果很好。但是,我仍然有关于何时拥有以下名称的问题:|马丁克里斯蒂安 |史密斯 | (Firstname and LastName) 并且另一个表中的人的全名是 |马丁·史密斯 |由于我的全名中没有“Christian”,因此我不会收到任何匹配项。
  • 这将使查询变得非常慢,因为现在您最终不得不在两个字段上执行LIKE。我建议您执行此复杂匹配一次 并存储结果。
  • 另外,你没有提到你必须在你的问题中进行这种比较。请发布完整的问题。您提到必须在底部处理中间名,然后举一个两个表都包含中间名的示例。你的新问题是不同的。请相应地更新您的问题。
【解决方案2】:

这样试试,

SELECT *
FROM Table1 T1
INNER JOIN Table2 T2 ON T1.FullName = T2.FirstName + ' ' + T2.LastName

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    相关资源
    最近更新 更多