【问题标题】:sql join int varcharsql join int varchar
【发布时间】:2012-09-29 11:22:00
【问题描述】:

我一直在搜索问题,但没有找到答案。我想对表 1 和表 2 进行内部连接,但一个字段是 INT,另一个是 VARCHAR(结构为“A-INT”)。比如:

    Table1                    Table2

    ID NAME   WHATEVER        ID USER
    1  A-001  ---             1  001 
    2  A-002  ---             2  002
    3  A-003  ---             3  003
    3  A-004  ---             4  004  
    ...

如何构造查询?比如:

... Table1 INNER JOIN Table2 ON Table1.NAME = Table2.[A-USER] ...

【问题讨论】:

  • 哪个 dbms ?对于这些操作,功能往往各不相同...
  • 您要在联接中使用的是ID 还是Table2 中的USER 字段?

标签: sql int inner-join varchar


【解决方案1】:

您需要将int 值转换为varchar 并将其与'A-' 连接,或者获取varchar 值的数字部分并转换为int

根据您使用的数据库,这会有所不同,对于 SQL Server,它看起来像这样:

select t1.ID, t1.WHATEVER, t2.USER
from Table1 t1
inner join Table2 t2 on t2.ID = cast(substring(t1.NAME, 3, 3) as int)

【讨论】:

  • 以防万一有人觉得这个问题有用,在这种情况下它会是 substring(t1.NAME,3,3)
【解决方案2】:

通过串联尝试,

SELECT *
FROM Table1 a, Table2 b
WHERE a.Name = 'A-' + b.User

但请注意,这会降低性能。

【讨论】:

  • @RaphaëlAlthaus 这个问题说明了USER 具有000 格式。
  • 是的,这就是我删除的原因,抱歉;)
  • 在 MYSQL 中,这仅在 b.User 是字符串时才有效。如果您需要连接(和转换类型),请使用 concat('A-', b.User)
【解决方案3】:

您想在 Table1.NAME = Table2.[A-USER] 上进行内部联接。

如果 Table1.NAME, Table2.[A-USER] 列数据类型不同,则不能使用内连接。

【讨论】:

    猜你喜欢
    • 2011-01-21
    • 2013-11-27
    • 2013-07-21
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    相关资源
    最近更新 更多