例如,()
在sqllite3
中起作用:
select *
from orders
where custid = ?
and status in ()
但是它在postgres
中失败:
ksysdb=# select code, applicable_objecttype
from pssystem_ktagtype where applicable_objecttype in ();
ERROR: syntax error at or near ")"
LINE 1: ...pe from pssystem_ktagtype where applicable_objecttype in ();
使用(null)
使postgres开心,并且似乎不打扰sqllite3:
ksysdb=# select code, applicable_objecttype
from pssystem_ktagtype where applicable_objecttype in (null);
code | applicable_objecttype
------+-----------------------
(0 rows)
但是它可以在SQL Server和Oracle上运行吗? ANSI SQL有什么要说的?我的猜测是null
永远不会匹配任何内容(包括null
本身),因此列表中的条件总是会为false。
答案 0 :(得分:1)
IN (NULL)
在Postgres,SQL Server,Oracle,MariaDB,MySQL和SQLite中应该没问题。至少我无法在this或SQL Fiddle上产生任何错误。
设置:
CREATE TABLE a
(a varchar(1));
INSERT INTO a
(a)
VALUES ('a');
SELECT *
FROM a
WHERE a IN (NULL);
答案 1 :(得分:0)
也许您可以执行一个子查询,该查询返回空列表: 选择 * 从订单 哪里= 和状态(选择...)
而且我不理解您要实现的目标,在空列表中执行操作始终会返回False。