【问题标题】:Check if value of one column is in another table's column and return another column's value if it is [duplicate]检查一列的值是否在另一个表的列中,如果是 [重复],则返回另一列的值
【发布时间】:2019-05-26 13:40:33
【问题描述】:

我有 2 个表,其中有一个类似的列称为“Re”,但表 1 中的“Re”列是一个列表,如下所示。

我想搜索 Table2.Re 是否在 Table1.Re 中,如果是则返回 Table1.FiN。

表一

 FiN       Re
  A     ,1,2,3,4
  B     ,6,7,8,9
  C     ,3,5,6,7
  D     ,7,10,11,24

表2

Re   
3
5
6
9

【问题讨论】:

  • 我很欣赏这个链接。我没有创建表,我只需要从中查询数据。
  • 为了详细说明@stickybit 不使用逗号分隔列表的建议,他在下面提供的方法是两种方法之一。另一个涉及拆分功能。两者都不好玩,虽然一个比另一个表现更好,但也需要更多的工作。

标签: sql sql-server tsql sql-server-2012


【解决方案1】:

你可以试试LIKE

SELECT t1.[FiN]
       FROM [Table 2] t2
            INNER JOIN [Table 1] t1
                       ON t1.[Re] LIKE concat('%,', t2.[Re], ',%');

但说真的,您不应该使用逗号分隔的列表。

【讨论】:

  • 谢谢,这行得通!我明白你所说的不使用逗号分隔列表是什么意思。
【解决方案2】:

就像我们使用INSTR(..) 来检查实际字符串,如果子字符串存在相同的情况,CHARINDEX(..) 将执行相同的操作,如果匹配则值将大于 0。因此,您将获得所需的输出.

 SELECT  t2.RE FROM TABLE2 t2
 JOIN TABLE1 t1
 ON
 CHARINDEX(t1.re, t2.re)>0;

或 将like 用作

     SELECT  t2.RE FROM TABLE2 t2
      JOIN TABLE1 t1
      ON
      t1.re LIKE "%,"+ t2.re + "%,";

【讨论】:

  • 什么是strpos?看起来像一个 PHP 函数,这个问题没有被标记。我从未在 SQL Server 中见过它。而TRIM 仅在 2017 年可用,而 RTRIMLTRIM 在 2012 年及更早版本中可用。
  • 更正了我试图找到 instr 的等价物,我认为 charindex 是一个
  • 其实也不需要修剪
  • 运行时报错:Invalid column name ',%'
  • 这是一个双引号问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
  • 2021-12-29
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多