別の表の列のANY行に一致する問合せを実行できますか?私は例のためにこれを実行しようとしています:Vertica - 式として使用される副問合せが複数の行を戻しました
SELECT *
FROM emails
WHERE address ILIKE '%@' || IN (select * from dictionary.wordlist) || '.%'
しかし、これは[のVertica] VJDBCエラーを返します:式が
別の表の列のANY行に一致する問合せを実行できますか?私は例のためにこれを実行しようとしています:Vertica - 式として使用される副問合せが複数の行を戻しました
SELECT *
FROM emails
WHERE address ILIKE '%@' || IN (select * from dictionary.wordlist) || '.%'
しかし、これは[のVertica] VJDBCエラーを返します:式が
複数の行が返さとして使用サブクエリは、今では奇妙ですそれを定式化する方法...
基本的なSQLチュートリアルに戻ると、'%@'
のような文字列リテラルは、ILIKE述語のオペランドになる可能性があります。b eはIN()節と連結されています。これはそれ自身の述語です。
emails
テーブル内のすべての行が、アットマークとドットの間にあるdictionary.wordlist
の単語のいずれかを含んでいるとします。
dictionary.wordlist
は、1列の表がVARCHAR()
または他の文字列形式であることを希望します(私が間違っている場合は修正します)。そうであれば、次のようにすることができます:
WITH
-- out of "dictionary.wordlist", create an in-line-table containing a column
-- with the wildcard operand to be later used in an ILIKE predicate
operands(operand) AS (
SELECT
'%@'||wordlist.word||'.%'
FROM dictionary.wordlist
)
SELECT
emails.*
FROM emails
INNER JOIN operands
ON email.address ILIKE operands.operand
;
もちろん、他の方法もありますが、これもその1つです。 私はそれが非常に高速になりますと言っしようとしていないよ - 幸運
...条件がパフォーマンスすることはできません登録しようとしてILIKE述語
マルコ・セイン