[英]How to check if string value in one column is partially contained in string value of another column using SQL?
[英]SQL: given an array of strings, filter if a string column is partially contained in this array
表架構
Tags
----
["foo"]
["foo2", "bar"]
["bar", "foo_bar"]
["bar"]
Tags
列的內容是一個 json 字符串。
假設數組是["foo", "foo_bar"]
,這個數組中包含的任何標簽都需要被過濾掉,所以預期的 output 將是
Tags
----
["foo2", "bar"]
["bar"]
我目前使用的查詢語句類似如下
SELECT tags
FROM table
WHERE (
-- Translate the array into cases
CASE
WHEN tags like '%"foo"%' THEN false -- filter out "foo"
WHEN tags like '%"foo_bar"%' THEN false -- filter out "foo_bar"
... -- filter out others in the given array
ELSE true
END
)
我想知道是否有更有效的方法來做到這一點?
如果將數組作為 json 字符串傳遞,則可以在HAVING
子句中使用JSON1 擴展函數和聚合條件:
WITH cte(tag) AS (SELECT json_each.value FROM json_each('["foo", "foo_bar"]'))
SELECT t.tags
FROM tablename t, json_each(tags)
GROUP BY t.tags
HAVING SUM(json_each.value IN cte) = 0
請參閱演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.