使用连接字段的 SQL JOIN

Posted

技术标签:

【中文标题】使用连接字段的 SQL JOIN【英文标题】:SQL JOIN using Concatenated Field 【发布时间】: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,或者在哪个方向,它都会失败。我知道我在这里做了一些愚蠢的事情,所以如果有人能指出我正确的方向,我将不胜感激。

【问题讨论】:

“失败”到底是什么意思?你有错误吗?你得到错误的结果吗? 【参考方案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

以上是关于使用连接字段的 SQL JOIN的主要内容,如果未能解决你的问题,请参考以下文章

sql join,left join,rigt join

sql语句中join、left join 、right join有啥区别?

sql语句中JOIN ON 的使用

sql join on 与where

sql 各种连接的使用条件,

SQL文摘:sql(join中on与where区别)