SQL Query 在 Inner JOIN 期间连接两列

Posted

技术标签:

【中文标题】SQL Query 在 Inner JOIN 期间连接两列【英文标题】:SQL Query Concatenate two columns during Inner JOIN 【发布时间】:2012-04-07 08:30:42 【问题描述】:

我有表 A 和表 B,表 A 有几列,包括 A1 和 A2。表 B 也有几列。 我的查询要求我连接 A1 和 A2 中的值,然后在 B1 上进行内部连接。

例子:

Select * 
From A
INNER JOIN B
ON CONCAT(A1,A2) = B1.

显然这不是它应该如何工作的。有人可以帮我解答这个问题吗?

谢谢。

【问题讨论】:

它不如在 ID 上链接高效,但如果这是您需要的,那么这就是您所需要的。除了最基本的要求之外,您无法简化问题! MS-SQL?如果那是你的 qs。 :-P 好吧,我已经将示例放置在最具代表性的系统中以连接列。但是是的,MS-SQL 是我问题的答案。 【参考方案1】:

Sample taken from

表格地理

region_name store_name
East    Boston
East    New York
West    Los Angeles
West    San Diego

示例 1: 对于 mysql/Oracle:

    SELECT CONCAT(region_name,store_name) FROM Geography 
    WHERE store_name = 'Boston';
Result: 'EastBoston'

示例 2: 对于甲骨文:

    SELECT region_name || ' ' || store_name FROM Geography 
    WHERE store_name = 'Boston';
Result: 'East Boston'

示例 3: 对于 SQL Server:

    SELECT region_name + ' ' + store_name FROM Geography 
    WHERE store_name = 'Boston';
Result: 'East Boston'

从这里开始,您可以适应两个表而没有太大问题。 如有疑问,请使用虚拟表使内容更具可读性。

如果有疑问,请查看已回答的其他问题以了解更多详情。

*** Similar Question

【讨论】:

【参考方案2】:

试试这个:

Select *  
From A 
INNER JOIN B 
ON A1 + A2 = B1

【讨论】:

@user583227 - 无论哪种方式,这都是答案,如果性能不好,您应该规范化您的表并正确索引它们。 +1 六分钟似乎过分了。它正在读取/返回多少数据?另外,请记住,根据数据类型或 A1 或 A2 是否为空,连接可能会出现问题。 @user583227,你为什么接受佩德罗对安德烈的回答?似乎他更直接地回答了您的问题并且获得了最多的支持。虽然 Pedro 的答案看起来更好并且提供了更多详细信息,但如果在您的查询中 B1 是 555ABC,A1 是 555,A2 是 ABC,由于添加了空格,他的答案将不起作用 - 而 Andrey 的答案会很好。只是好奇您的选择背后是否有其他原因(我不认识任何一个用户) 我同意 Kevin 和 Lamak 的观点。 Andrey 的查询不会导致性能问题。导致问题的是表结构,而不是查询。 Pedro 的回答肯定措辞非常好,尽管是对不同问题的回答。 好的。糟糕的性能背后的魔鬼是我不是在表上运行查询,而是在视图上运行。因此,所有的等待。感谢您为我指出正确的问题。

以上是关于SQL Query 在 Inner JOIN 期间连接两列的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Query 中使用多个 INNER JOIN 的 FROM 子句中的子查询的语法

在 SQL Server 查询的 WHERE 子句中引用或 INNER JOIN 一个 Pandas 数据帧值 [重复]

Sql inner join

关于SQL数据库中cross join 和inner join用法上的区别?

SQL中inner join,outer join和cross join的区别

具有 INNER JOIN 条件的 JPA 命名查询失败