【问题标题】:SQL ignore null array with WHERE IN UNNEST clauseSQL忽略带有WHERE IN UNNEST子句的空数组
【发布时间】:2021-02-13 07:08:32
【问题描述】:

在我开始使用数组之前,我一直在使用这个 solution

这是我的查询

SELECT * FROM listening_history WHERE 
(composition_id IN (SELECT UNNEST(%(arr)s)) OR %(arr)s is NULL) 
limit 50

和代码

arr = [1, 2, 3]
# arr = None
cursor.execute('SELECT * FROM listening_history WHERE '
               '(composition_id IN (SELECT UNNEST(%(arr)s)) OR %(arr)s is NULL) '
               'limit 50',
               {'arr': arr})

当数组不为空时,这工作得很好,但与一般解决方案不同,我必须在使用我的参数之前先使用 unnest。因此,我收到错误,无法执行此操作

UNNEST(NULL)

如果可能,如何在不使用用户定义函数的情况下忽略空数组?

【问题讨论】:

    标签: python sql arrays postgresql psycopg2


    【解决方案1】:

    好吧,我真的为自己感到羞耻,因为当我写这个问题时,我自己找到了解决方案。

    你可以这样做

    SELECT * FROM listening_history WHERE 
    (composition_id = ANY(%(arr)s) OR %(arr)s is NULL) 
    limit 50
    

    我真的为自己感到羞耻

    【讨论】:

    • 你不应该感到羞耻。这意味着您遇到问题并发布了问题。好的,这就是 SO 存在的原因。这也意味着你不只是等待别人告诉你怎么做,你坚持并找到了答案。我将其归类为令人钦佩而不是可耻。因此,现在将您的答案标记为已接受,以帮助可能有相同问题的其他人。
    猜你喜欢
    • 2017-05-31
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多