Значение перед переменной

Я смотрю на некоторый код SQL, который имеет оператор Where как это:

WHERE 'USD' = CCY

Я спросил устройство записи, почему он помещает значение на левой стороне, и он сказал, что это - лучшая практика, чтобы сделать так, происходя от C++, где люди могли по ошибке присвоить значение вместо того, чтобы сравнить равенство путем упущения, что второе равняется знаку.

Я никогда не видел это прежде.

Каковы Ваши мысли?

5
задан SilentGhost 5 February 2010 в 13:05
поделиться

6 ответов

Э, C ++ не является SQL. В SQL нет == и нет присваиваний в предложении WHERE .

Я не уверен, что это можно назвать «лучшей практикой», но есть соглашение, согласно которому известное значение помещается в правую часть. Итак, с литералом, как в вашем примере, это будет

WHERE CCY = 'USD' 
8
ответ дан 18 December 2019 в 13:14
поделиться

Лучшая практика в C ++ не делает ее лучшей практикой в ​​SQL. Оптимизатору запросов все равно, так что это просто вопрос предпочтений, но я должен сказать, что это не было бы моим предпочтением или тем, как я бы, естественно, это написал.

4
ответ дан 18 December 2019 в 13:14
поделиться

Если вы посмотрите на это:

'USD' = CCY

по сути то же самое:

 CCY = 'USD'

Что касается:

это лучше всего сделать, исходя из из C ++, где люди могли ошибочно присвоить значение вместо сравнения равенства, забывая второе {{ 1}} знак равенства.

Ну, я никогда не видел, чтобы это происходило, и если бы это было так важно, мы бы точно где-то это видели, и это практиковалось бы большинством, если не всеми.

0
ответ дан 18 December 2019 в 13:14
поделиться

Никогда не видел этого в SQL, где, конечно, рассуждения C ++ неприменимы, поскольку '=' не является оператором присваивания в этом контексте. кроме того, многим программистам на C ++ (включая меня) не нравится этот стиль.

2
ответ дан 18 December 2019 в 13:14
поделиться
List<SubProduct> subProducts= (List<SubProduct>)Model.subproduct;

Неявное преобразование не выполняется, поскольку List < > реализует IList , а не наоборот. Так можно сказать IList < T > foo = new List < T > () , но не List < T > foo = (некоторый метод или свойство возврата IList) .

-121--975658-

Er, C++ не является SQL. В SQL нет = = , а в предложении WHERE нет назначений.

Я не уверен, что он квалифицируется как "лучшая практика", но есть соглашение, которое ставит известное значение на правой стороне. Таким образом, с литералом, как в вашем примере, который был бы

WHERE CCY = 'USD' 
-121--4667646-

Я бы лично не сделал это таким образом, но поместил имя столбца в левой части, так как это мне более читаемо/легче следовать в SQL-запросе.

Я очень редко видел, как это делается противоположным образом, и не думаю, что приведенная причина действительно применима к SQL (как было указано, это "=" в SQL, а не "= =")

0
ответ дан 18 December 2019 в 13:14
поделиться

Если он говорит, что это лучшая практика, я бы попросил его доказать это с исходными кодами SQL, а не C ++. Поскольку 99,9% кода SQL, который я когда-либо читал (включая наш код, код другой организации, файлы справки Microsoft, блоги SQL и т. Д.), Делает противоположное тому, что делает ваш разработчик, я бы сказал, что нарушая нормальные ожидания разработчик, который будет поддерживать код - плохая идея. В SQL мы ожидаем увидеть форму

WHERE CCY = 'USD'  

, а не

WHERE  'USD' = CCY  

, поэтому специалист также должен писать код таким образом, чтобы гарантировать, что он будет понятен сопровождающему.

0
ответ дан 18 December 2019 в 13:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: