【问题标题】:Teradata SQL code to join against a string用于连接字符串的 Teradata SQL 代码
【发布时间】:2021-02-22 03:17:34
【问题描述】:

我有一个具有以下值的表 A

+----+----------+-----------------------+
| ID |   Date   |         Name          |
+----+----------+-----------------------+
|  1 | 1/4/2019 | Kara,Sara,John        |
|  2 | 3/2/2018 | Sara                  |
|  3 | 4/3/2019 | Lynn,John,Chris,Agnes |
|  4 | 2/1/2020 | Phillip, Anton        |
|  5 | 5/1/2020 | Quinn                 |
|  6 | 7/6/2020 | Idie,John             |
+----+----------+-----------------------+

还有一个具有以下值的表 B

+-------+
| Name  |
+-------+
| John  |
| Sara  |
| Chris |
+-------+

我希望输出如下:

+----+----------+-----------------------+--------+-----------------+
| ID |   Date   |         Name          | B.Name | Exists in List? |
+----+----------+-----------------------+--------+-----------------+
|  1 | 1/4/2019 | Kara,Sara,John        | Sara   | Yes             |
|  1 | 1/4/2019 | Kara, Sara, John      | John   | Yes             |
|  2 | 3/2/2018 | Sara                  | Sara   | Yes             |
|  3 | 4/3/2019 | Lynn,John,Chris,Agnes | John   | Yes             |
|  3 | 4/3/2019 | Lynn,John,Chris,Agens | Chris  | Yes             |
|  4 | 2/1/2020 | Phillip, Anton        |        | No              |
|  5 | 5/1/2020 | Quinn                 |        | No              |
|  6 | 7/6/2020 | Idie,John             | John   | Yes             |
+----+----------+-----------------------+--------+-----------------+

我尝试使用 CONTAINS,但看起来 teradata sql 不接受它。尝试使用 CSVLD 将文本转换为列。但是,由于字符串可以接受的逗号数量不固定,如果我事先不知道需要从文本中重新创建多少列,我将无法使用 CSVLD 函数。 想知道是否有任何替代方法可以将一列与一串值连接起来?感谢您的善意意见。

【问题讨论】:

  • 结果没有意义。为什么萨拉不说“是”?
  • right.my bad.. 修复了它
  • 这些表的行数是多少? Gordon 的回答将导致 product join 可能需要大量 CPU...

标签: sql teradata


【解决方案1】:

你真的应该修复你的数据模型——在一个字符串中存储多个值是一种糟糕的、糟糕的数据设计。 SQL 有一种存储列表的好方法——它被称为表。

假设你被别人的非常非常糟糕的数据模型困住了,你可以使用left join

select a.*, b.name,
       (case when b.name is not null then 'Yes' else 'No' end) as in_list
from a left join
     b
     on ',' || a.name || ',' like '%,' || b.name || ',%';

【讨论】:

  • 谢谢戈登!你是最棒的。
猜你喜欢
  • 2017-12-31
  • 2011-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
相关资源
最近更新 更多