簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM