Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 合并或案例更有效和/或更标准_Sql_Standards_Sql Standards - Fatal编程技术网

Sql 合并或案例更有效和/或更标准

Sql 合并或案例更有效和/或更标准,sql,standards,sql-standards,Sql,Standards,Sql Standards,就x和y而言 x是否更符合sql标准?[如果主观,请道歉] x比y更有效吗 或者这些脚本完全不同,可以在不同的上下文中使用 x y COALESCE本质上是一种速记CASE语句 两者完全相同 SQL Server中也有ISNULL(与其他DBMS不同),但这实际上是一个非标准特性,实际上比COALESCE更为有限,在这种情况下,我将使用COALESCE(它提供的级别比ISNULL)而不是case语句 CASE语句在这里似乎有点笨重,因为您只检查NULLs。我认为COALESCE还可以生成更可

就x和y而言

  • x是否更符合sql标准?[如果主观,请道歉]
  • x比y更有效吗
  • 或者这些脚本完全不同,可以在不同的上下文中使用
x

y


COALESCE
本质上是一种速记
CASE
语句

两者完全相同


SQL Server中也有
ISNULL
(与其他DBMS不同),但这实际上是一个非标准特性,实际上比
COALESCE
更为有限,在这种情况下,我将使用
COALESCE
(它提供的级别比
ISNULL
)而不是
case
语句


CASE
语句在这里似乎有点笨重,因为您只检查
NULL
s。

我认为COALESCE还可以生成更可读的代码,并且更易于移植IIRC。实际上,isnull在不同的数据库中有不同的名称。在甲骨文中是nvl。在redbrick中,它是ifnull。这可能就是你所说的非标准。@DanBracuk是的,这就是我的意思,我解释得很清楚。
ISNULL
不是标准,所以我没有使用它,也许是主观的,但关注哪个“更标准”似乎是矛盾的在流体数据库设计中,联接列根据列是否包含空值而更改。这种加入对我来说是危险的。从表面上看,这是一种脆弱的设计。@Tim-如果你把它作为一个答案来添加,会更有建设性-充分解释你的“危险信号”和“脆弱的设计”顾虑…我理解
a
b
中应该避免
null
:但这是一个完全不同的主题!如果我回答这个问题,它将被否决,我将被谴责它应该是一个注释:-)解释:表B有两列外键指向表a中的一列。当列位于外键关系的子表中时,允许列为NULL值是可以接受的。在表中有两个这样的列,都允许空值,并指向同一父表中的同一列,这表明发生了非规范化,这是非标准的。@Tim感谢您的解释;这不是我的db-我只是想用标准的方式审问它
    SELECT * 
    FROM   a 
           INNER JOIN b ON
           COALESCE(b.columntojoin, b.alternatecolumn) = a.columntojoin
    SELECT * 
    FROM   a 
           INNER JOIN b ON
           (case when b.columntojoin is null then b.alternatecolumn else b.columntojoin end) = a.columntojoin