【问题标题】:SQL JOIN using Concatenated Field使用连接字段的 SQL JOIN
【发布时间】:2011-06-09 05:36:35
【问题描述】:

我有两个表,Table1 包含一个列,其中包含 Table2 中某个列的部分值,例如:

Table1.XName = "123456" Table2.ZName = "ABC-123456"

我需要创建一个与这些匹配的 JOIN,但使用 MS-SQL 2008 我无法完成这项工作。这是我的尝试示例:

从表 1 中选择 * LEFT OUTER JOIN Table2 ON ('ABC-'+Table1.XName)=Table2.ZName

无论我使用什么类型的 JOIN,或者在哪个方向,它都会失败。我知道我在这里做了一些愚蠢的事情,所以如果有人能指出我正确的方向,我将不胜感激。

【问题讨论】:

  • “失败”到底是什么意思?你有错误吗?你得到错误的结果吗?

标签: sql sql-server join concatenation


【解决方案1】:

尝试使用

SELECT
  *
FROM
  Table1 LEFT OUTER JOIN Table2 ON
    Table1.XName LIKE CONCAT("%", Table2.ZName, "%") OR
    Table2.XName LIKE CONCAT("%", Table1.ZName, "%")

如果对你有用,请标记答案。

【讨论】:

  • 这似乎对我不起作用。 “指定的号码无效”始终是结果。 CONCAT 有效。
  • 谢谢。更新了答案。
【解决方案2】:

随机猜测...

Table1.XName 数据类型是数字(不是基于字符的),因此会出现转换错误

SELECT * FROM
Table1
LEFT OUTER JOIN
Table2 ON 'ABC-' + CAST(Table1.XName as varchar(30)) = Table2.ZName

【讨论】:

    【解决方案3】:

    这对我有用:

    DECLARE @Table1 TABLE (XName VARCHAR(200))
    DECLARE @Table2 TABLE (ZName VARCHAR(200))
    
    INSERT
    INTO    @Table1
    VALUES  ('123456')
    
    INSERT
    INTO    @Table2
    VALUES  ('ABC-123456')
    
    SELECT  *
    FROM    @Table1
    LEFT JOIN
            @Table2
    ON      ZName = 'ABC-' + XName
    
    ---
    
    123456  ABC-123456
    

    能否请您发布您的表格的定义和您收到的错误消息?

    【讨论】:

    • 实际上,我发现我在 JOIN 部分中对完整的表名进行了粗略的处理。所以 = 'ABC-'+Table1.XName 不正确,应该被翻转为 Table1.XName = 'ABC-'+Table2.ZName
    猜你喜欢
    • 1970-01-01
    • 2011-09-29
    • 2023-03-22
    • 2013-06-30
    • 2010-09-26
    • 2016-12-27
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多