代码之家  ›  专栏  ›  技术社区  ›  JL Peyret

什么是一种可移植的方式来表示一个与空列表作用相同的In条件?

sql
  •  2
  • JL Peyret  · 技术社区  · 6 年前

    () 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)

    ksysdb=# select code, applicable_objecttype 
    from pssystem_ktagtype where applicable_objecttype in (null);
    code | applicable_objecttype
    ------+-----------------------
    (0 rows)
    

    但它在SQL Server和Oracle上工作吗?ansi-sql必须说什么?我猜是这样的 null 无效的

    2 回复  |  直到 6 年前
        1
  •  1
  •   sticky bit    6 年前

    IN (NULL) SQL Fiddle db<>fiddle

    CREATE TABLE a
                 (a varchar(1));
    INSERT INTO a
                (a)
                VALUES ('a');
    SELECT *
           FROM a
           WHERE a IN (NULL);
    
        2
  •  0
  •   SocketPlayer    6 年前

    我不明白你想达到什么样的目标,在空名单上做的事情总是会返回错误。