使用连接字段的 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的主要内容,如果未能解决你的问题,请参考以下文章