相关疑难解决方法(0)

是否对SQL WHERE子句进行了短路评估?

例如:

SELECT * 
FROM Table t 
WHERE @key IS NULL OR (@key IS NOT NULL AND @key = t.Key) 
Run Code Online (Sandbox Code Playgroud)

如果@key IS NULL的计算结果为true,那么@key IS是否为NULL并且@key = t.Key是否已计算?

如果不是,为什么不呢?

如果是,是否有保证?它是ANSI SQL的一部分还是特定于数据库?

如果是数据库特定的,SqlServer?甲骨文?MySQL的?

参考:短路评估

sql short-circuiting

135
推荐指数
6
解决办法
5万
查看次数

查询以将相同的ID分配给正在插入的行(如果它已存在于表中)

我将客户记录插入到表中,如果已存在同名记录,我将为新插入的记录分配相同的ID.

假设表T有此记录:

ID | Name | Phone_Number | Date_Inserted
105| Sam  | 111111       | 04/03/2014
106| Rita | 222222       |04/03/2014
Run Code Online (Sandbox Code Playgroud)

我从表A中插入这个:

Name| Phone_Number
Sam | 333333
Run Code Online (Sandbox Code Playgroud)

插入后,表T应该具有:

ID | Name | Phone_Number | Date_Inserted
105| Sam  | 111111       | 04/03/2014
106| Rita | 222222       | 04/03/2014
105| Sam  | 333333       | 04/04/2014
Run Code Online (Sandbox Code Playgroud)

没有上述变化,它看起来像:

INSERT INTO T SELECT CustID.nextval,Name,Phone_Number,SYSDATE FROM A;
Run Code Online (Sandbox Code Playgroud)

我在考虑使用,

INSERT INTO T
  SELECT CASE 
           WHEN NOT EXISTS(select null from T WHERE T.Name=A.Name) THEN CustID.nextVal
           ELSE (select ID from …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

5
推荐指数
2
解决办法
1967
查看次数

标签 统计

sql ×2

oracle ×1

plsql ×1

short-circuiting ×1