Python 3.x 如果未找到我的搜索词,请添加到数组

Python 3.x 如果未找到我的搜索词,请添加到数组,python-3.x,postgresql,psycopg2,Python 3.x,Postgresql,Psycopg2,循环浏览术语列表并在数据库中搜索每个术语。是否有方法返回数据库中未找到结果的搜索词列表 这是我的选择查询: 如果在数据库中找不到任何结果,我想返回uw。这可能吗 如果在数据库中找不到任何结果,我想返回uw 对于一个搜索词 x_tbl、p_tbl和t_tbl之间的两个左[外]连接本身并不消除任何行。Two times NOT EXISTS返回无法找到任何内容的搜索词列表: 选择%uws-旧式Python占位符 不存在的地方 从p_tbl中选择 pa=%uws在哪里 或%uws=任何p.pb 而且不

循环浏览术语列表并在数据库中搜索每个术语。是否有方法返回数据库中未找到结果的搜索词列表

这是我的选择查询:

如果在数据库中找不到任何结果,我想返回uw。这可能吗

如果在数据库中找不到任何结果,我想返回uw

对于一个搜索词 x_tbl、p_tbl和t_tbl之间的两个左[外]连接本身并不消除任何行。Two times NOT EXISTS返回无法找到任何内容的搜索词列表:

选择%uws-旧式Python占位符 不存在的地方 从p_tbl中选择 pa=%uws在哪里 或%uws=任何p.pb 而且不存在 从t_tbl中选择 其中,t、ta、tc中的%uws 或%uws=任何tb ; 如果t_tbl和/或p_tbl中可能有孤立项未链接到x_tbl中的任何行,则集合可能会更大,并且查询会变得更昂贵:

选择%uws-旧式Python占位符 不存在的地方不存在 从x_tbl中选择使用p_id加入p_tbl p 其中p.pa=%uws 或%uws=任何p.pb 和 从x_tbl中选择使用t_id加入t_tbl 其中,t.t,t.ta,t.tc中的%uws 或%uws=任何t.tb ; 这是一次处理一个搜索词,就像原始查询一样。你提到了一份清单。为所有这些数据运行一个查询可能会便宜得多

一个查询就可以将它们全部规则化 将列表作为数组Postgres array literal传递(可能需要显式cast::text[]),并附加与上述相同的WHERE条件:

选择uw 从unnest%my_list_作为数组::text[]quw 不存在的地方 从p_tbl中选择 式中,pa=q.uw 或q.uw=任何p.pb 而且不存在 从t_tbl中选择 其中q.uw在t,ta,tc中 或q.uw=任何tb ; 或者,包括加入tbl_x,同上:

选择uw 从unnest%my_list_作为数组::text[]quw 不存在的地方 从x_tbl中选择使用p_id加入p_tbl p 其中p.pa=q.uw 或q.uw=任何p.pb 而且不存在 从x_tbl中选择使用t_id加入t_tbl 其中q.uw在t.t,t.ta,t.tc中 或q.uw=任何t.tb ; 基本知识:

您可能希望保持数组元素的原始顺序,甚至附加顺序位置。见:

除此之外,如果每个联接的右侧可以有多行,则原始查询可以成倍增加行。见:

SELECT x_tbl.x_str
    FROM x_tbl
    LEFT JOIN p_tbl ON p_tbl.p_id = x_tbl.p_id
    LEFT JOIN t_tbl ON t_tbl.t_id = x_tbl.t_id
    WHERE t_tbl.t = %(uw)s
    OR    t_tbl.ta = %(uw)s
    OR    %(uw)s = ANY (t_tbl.tb)
    OR    t_tbl.tc = %(uw)s
    OR    p_tbl.pa = %(uw)s
    OR    %(uw)s = ANY (p_tbl.pb)