我需要你的帮助
我试图运行一个查询,我搜索域,但我得到这个错误:
Column "%cointelegraph.com%" does not exist
我所指的代码是:
SELECT *
FROM fact f
WHERE f.country_id in (840)
AND f.domain in ("%cointelegraph.com%","%coindesk.com%")
你知道如何修复这个错误吗?
我将添加我使用SQL Vertica。
---------------------------------------------------------------
你的语法是关闭的,你应该使用两个LIKE
表达式:
SELECT *
FROM fact
WHERE country_id = 840 AND
(domain LIKE '%cointelegraph.com%' OR domain LIKE '%coindesk.com%');
LIKE
操作符在标准SQL中不支持任何IN
构造。
你做错了。
你应该这样做:
SELECT *
FROM fact f
WHERE f.country_id = 840
AND (f.domain LIKE '%cointelegraph.com%' OR f.domain LIKE '%coindesk.com%')
字符串在SQL中是用单引号括起来的,而不是你使用的双引号。
双引号用于表示标识符,即列名、数据库范围表达式(如CURRENT_DATE
)、表或视图等。
如果您使用保留字,如"AS"
或"USER"
,或者包含不属于程序员字的字母,如"This is a quoted column name"
,必须将标识符括在双引号中。Vertica,像任何遵守ANSI SQL标准的RDBMS一样,确信您在语法中的这个地方是指列名或伪列名,并且您得到的错误消息与此一致。
所以你的查询应该是这样的:
SELECT *
FROM fact f
WHERE f.country_id in (840)
-- AND f.domain in ("%cointelegraph.com%","%coindesk.com%") -- not this
-- AND f.domain in ('%cointelegraph.com%','%coindesk.com%') -- almost this
OR domain LIKE '%cointelegraph.com%' OR domain LIKE '%coindesk.com%' -- better this
事实上,你在域名周围使用百分号,意味着你想使用一个相似模式,而不是一个字符串来比较是否相等,所以IN()
谓词不适用;您需要同时使用两个LIKE
谓词OR
-ed。