Amazon Redshift:连接列内容略有不同的两列

Posted

技术标签:

【中文标题】Amazon Redshift:连接列内容略有不同的两列【英文标题】:Amazon Redshift: Joining two columns where column content is slightly different 【发布时间】:2018-08-21 05:42:41 【问题描述】:

我尝试了我在这个论坛上可能找到的一切。这是我想要做的:

Exam Name
-----------
Data Analysis
Data Visualization
Data Warehousing
Big Data

Course Name
------------
Exam Readiness: Data Analysis
Exam Readiness: Data Visualization
Exam Readiness: Data Warehousing
Exam Readiness: Big Data

基本上,我试图找出谁在参加相应考试之前参加了考试准备课程。有什么办法可以在两列上使用 LIKE 子句吗?唯一不同的是,Course Name 前面有“Exam Readiness”。

我在下面尝试了这两个:

第一个查询:

select * from table
where course_name like '%'+ exam_name + '%'

第二次查询:

select * from table
WHERE COLUMNA LIKE '%'||COLUMNB||'%'

这是两个不同的查询,而不是一个查询。

【问题讨论】:

您的第二个查询应该已经开始工作了。当你实际运行它时会发生什么? 尝试使用查询 select * from table whereexam_name like '%' ||课程名称 || '%' 在SQL中,+是加数字的运算符,所以第一个查询不能工作,但第二个使用正确的||运算符应该可以工作 当我尝试“ select * from table whereexam_name like '%' || course_name || '%' ”它什么也没返回,我还尝试了“ select * from table where course_name like '%' | |exam_name || '%'" 返回 0 个结果。 这当然行得通:rextester.com/GLS89459 我猜有些事情你没有告诉我们。 【参考方案1】:

试试:

SELECT
  foo
FROM exam
JOIN course ON (course.name = 'Exam Readiness: ' || exam.name)

【讨论】:

这比对 OP 提供的数据使用 like 更好。 返回零结果.. :( 好吧,然后尝试调试它。一旦列名正确匹配,它将起作用。

以上是关于Amazon Redshift:连接列内容略有不同的两列的主要内容,如果未能解决你的问题,请参考以下文章

Amazon Redshift - 横向列别名参考

如何更改 Amazon Redshift 中的默认时区?

Amazon Redshift:根据表中存在的列列表选择列

如何使用 Amazon Redshift 中的临时表列更新现有表中的列?

如何在 Amazon Redshift 中将列从字符串更改为日期?

在 Insert into() 上不尊重身份列 (Amazon Redshift)