sql - 如何在 LEFT JOIN 中使用 Replace() 后生成的关系

标签 sql postgresql

我正在尝试对两个表执行LEFT JOIN。两者都有一个名为 WEBSITE 的列。一个填充了诸如 http://abc.com 之类的协议(protocol),另一种则没有填充诸如 abc.com 之类的协议(protocol)。

我正在尝试加入这些表。网站专栏。我尝试替换协议(protocol),然后像这样执行连接:

SELECT replace(WEBSITE, 'http://', '') as SITENAME FROM WITHPROTOCOLTABLE LEFT JOIN WITHOUTPROTOCOLTABLE ON (WITHPROTOCOLTABLE.SITENAME = WITHOUTPROTOCOLTABLE.WEBSITE)

但我收到错误:columnWITHPROTOCOLTABLE.SITENAME 不存在

如何执行JOIN。请指教。


编辑:

表格:

WITHPROTOCOLTABLE

website           somedata
----------------|---------------
http://abc.com  |  abcdef
http://xyz.com  |  xyzabc

WITHOUTPROTOCOLTABLE

website
-------
abc.com
xyz.com

最佳答案

如果您的 WITHPROTOCOLTABLEWITHOUTPROTOCOLTABLE 是两个不同的表或 View ,则在连接条件中使用 REPLACE 函数,如下所示:

SELECT replace(WEBSITE, 'http://', '') as SITENAME
FROM WITHPROTOCOLTABLE
LEFT JOIN WITHOUTPROTOCOLTABLE
      ON (REPLACE(WITHPROTOCOLTABLE.WEBSITE, 'http://', '')
           = WITHOUTPROTOCOLTABLE.WEBSITE)

关于sql - 如何在 LEFT JOIN 中使用 Replace() 后生成的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15564769/

相关文章:

python - 生成随机字母数字字符串作为模型的主键

sql - 如何在分组集查询中仅显示前 2 个和前 1 个值?

php - Laravel 框架错误 : SQLSTATE[42000]: Syntax error or access violation: 1064

mysql - 选择最新的 100 篇文章的 sql 查询,然后按最高评分顺序返回该结果的 30 篇文章

mysql - 通过在 MYSQl 中更新其值来插入重复行

sql - Postgres : use of CASE and ANY() in WHERE clause

sql - 基于Region和Cluster查询SQL的计算

Mysql查询将2个表中的列获取到一个结果集中

mysql - 在连接表而不是实际表上使用查询

postgresql - 如何在PostgreSQL中通过引用表A为表B添加外键和通过引用表B为表A添加外键?