>假设我创建了一个这样的表:
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
具有我认为默认的值。
有没有办法向表或查询添加某种语句,该语句将对where
子句中未明确约束的a
使用一些默认值?例如,如果我在where
之后不写a1="b"
,我只会得到a1
等于"b"
的行,而不是任何值,但如果我写a1="c"
,我会得到这些。
所有a
的默认值都相同。
对我来说,最好的解决方案是将默认值烘焙到表或数据库文件中。
有没有办法向表或查询添加某种语句 将使用一些未明确定义的默认值 在 WHERE 子句中受约束?
简短的回答:不可以。
根据你在这里所说的:
例如,如果我不写a1="b" 之后
我想您可能经常运行此查询,甚至可能是手动运行,并且您希望传入一些不同的值。如果确实如此,则可以传入参数并使用一些变量来处理此问题。
你能做的,就是在WHERE
中有一个CASE
声明来提供帮助。请考虑以下事项:
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
,您可以使用其他一些值来执行其他操作。轮到你了。
编辑:
对于 Shawn 在评论中的观点,如果%s
传递的参数要么是NOT NULL
的,要么是合法的值,那么ifnull()
将是这个案例陈述的一个更干净的替代方案。示例如下:
WHERE
a1 = ifnull(%s, 'b')