在sql中保持=左边的列有什么区别

时间:2014-06-27 08:09:06

标签: sql postgresql

我正在读别人sql,他的代码就像这样

有一个名为user_v的视图,列path为数组

select * from user_v where 'USER_TYPE'=path[2]

我不能使用

path[2] = 'USER_TYPE'

3 个答案:

答案 0 :(得分:4)

这是一些程序员在语言中采取的预防措施,其中分配和比较很容易混淆,例如C或PHP,其中以下语句看起来是无辜的:

 if ( $foo = 1 )

但它实际上 1分配给$foo,而if将始终评估为true(至少在PHP中,其中1为真。意思是if ( $foo == 1 )

如果您反转参数,错误会更快显现:

if ( 1 = $foo ) # SYNTAX ERROR
if ( 1 == $foo ) # Desired behaviour

这有时被称为“yoda编码”,位于the coding standards of Wordpress, for example

另请参阅:Why put the constant before the variable in a comparison?

在SQL中,这种混乱的可能性较小,因为虽然=可能意味着分配或比较,但很少有错字会选择错误含义的情况。

但是,如果项目使用的每种其他语言的编码标准都要求它,那么通过在SQL中使用它来强化习惯是有意义的,因为我无法想到具体的原因 not < / em>以这种方式写它。

答案 1 :(得分:1)

完全没有区别。

答案 2 :(得分:0)

这是心理学。 您可能希望阅读其他人的代码,然后说:

  

我的专栏等于2。

当你读到:

  

其中2等于我的列

你必须停一会儿,回来,向你自己解释。

为了让其他人的生活更轻松,我们保持所有这些看起来很乍看的规则。