为特定列设置WHERE子句的默认值

时间:2019-02-16 19:06:18

标签: sql sqlite

假设我创建了一个这样的表:

CREATE TABLE stuff(
  a1 TEXT,
  a2 TEXT,
  . . .
  an TEXT,
  data TEXT
);

我需要这样进行SELECT个查询:

SELECT data FROM stuff WHERE
a1="..." and a2="..." and . . . and an="..."

选择数据的特定值,并指定所有 a个值。

很多a的某些值我都认为是默认值。

是否有一种方法可以向表或查询中添加某种语句,这些语句将对a子句中未明确约束的where使用某些默认值?例如,如果我不写在a1="b"之后的where,我只会得到a1等于"b"的行,而不是任何值,但是如果我写a1="c"我知道了。

所有a的默认值都相同。

对我来说,最好的解决方案是将默认值烘烤到表或数据库文件中。

1 个答案:

答案 0 :(得分:1)

  

有没有一种方法可以向表或查询中添加某种语句   将使用一些默认值,因为默认值未明确   约束在where子句中?

简短回答:否

根据您在这里所说的话:

  

例如,如果我不在哪里写 a1 =“ b”,

我认为您可能经常运行此查询,甚至可能是手动运行,并且您希望传递一些不同的值。如果确实如此,则可以传入参数并使用一些变量来处理。

您可以做的是在CASE中有一个WHERE语句来提供帮助。请考虑以下内容:

SELECT *
FROM
    table
WHERE
    CASE
        WHEN %s IS NOT NULL
            THEN a1 = %s
        ELSE a1 = 'b'
        END
    [AND/OR] <other constraints here>

现在,实际执行此操作的语法将根据您实际用于执行查询的内容而有所不同。它们是从python程序运行的吗? .NET中的某些内容?等等

此外,您不必严格遵守我在此处使用的IS NOT NULL,您可以使用其他一些值来执行其他操作。由你决定。

编辑:

就肖恩在评论中的观点而言,如果传入的参数%sNOT NULL或合法值,那么ifnull()将是更恰当的选择。下面的示例:

WHERE
    a1 = ifnull(%s, 'b')