where子句中所有内容的oracle sql占位符

uinbv5nw  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(360)

我正在尝试用 WHERE 实际上不过滤任何内容的子句。

import cx_Oracle
condition = []

# condition = ['a', 'b']

query = ("""
    SELECT *
    FROM table
    WHERE var = {}""".format(tuple(condition)))

with cx_Oracle.connect(dsn=tsn), encoding="UTF-8")) as con:
    df = pd.read_sql(con=con, sql=query)

免责声明:对sql还是有点陌生。我欣赏术语的更正
编辑:

alen0pnh

alen0pnh1#

通常使用如下逻辑处理:

where col = :input_val or :input_val is null
yacmzcpb

yacmzcpb2#

如果您不想让where子句过滤任何内容,那么它需要包含一个始终为true的条件;像这样的

SELECT *
  FROM table1
  WHERE var = var OR
        var IS NULL

db<>在这里摆弄

sbdsn5lh

sbdsn5lh3#

如果需要使用索引且列值不可为null,则需要使用 NVL 诡计。我不知道为什么,但是oracle对 NVL 而不是 ...OR A IS NULL 表情。

SELECT *
FROM table
WHERE nvl(anyvalueofvar1, var) = var;

请看我在这里的答案,以获得由这种不同语法生成的更好的执行计划的示例。
(我说“列值不能为null”,因为 NULL = NULL 在甲骨文中不是这样的,所以 NVL 如果列有空值,表达式将不起作用。我通常讨厌这些行为怪异的神秘语法,但它们有时是性能所必需的。)

相关问题