Пытаюсь разобрать этот sql - PullRequest
5 голосов
/ 27 августа 2011

Я пытаюсь понять, что на самом деле делает этот SQL (из установки MySQL):

IF(coalesce(a.entity_id, 0) != 0, 0, 1)

Хотя я понимаю, что такое объединение, я не понимаю, как выражение IF изменяет его.

Ответы [ 6 ]

3 голосов
/ 27 августа 2011

Я думаю:

coalesce (a.entity_id, 0) - вернуть первое ненулевое значение,

если a.entity_id не равно нулю, вы получаете 0 в результате if, иначе 1.

a.entity_id = null => coalesce = 0 => if = 1

a.entity_id не является нулевым => coalesce = a.entity_id => if = 0

2 голосов
/ 27 августа 2011

coalesce возвращает первый NON-нулевой аргумент. Поэтому, если a.entity_id равно нулю, coalesce вернет 0. содержащий if () затем проверяет, является ли аргумент ненулевым, и возвращает 0 или 1.

в основном это запутанный способ написания a.entity_id IS NULL.

1 голос
/ 27 августа 2011

Условие будет выполнено, если a.entity_id - это значение, которое не NULL И , а не 0.

1 голос
/ 27 августа 2011

Вы смотрите на MySQL IF() функцию .По сути, это троичный оператор в логическом выражении, представленном в аргументе 1. (По вашему вопросу вы поняли, что делает COALESCE.)

  • Если expr1 равен TRUE (expr1 <> 0 и expr1<> NULL) затем IF () возвращает expr2;
  • Если expr1 равен FALSE, он возвращает expr3.

IF() возвращает числовое или строковое значение в зависимости от контекста, в котором оно используется.

mysql> SELECT IF(1>2,2,3);
        -> 3
mysql> SELECT IF(1<2,'yes','no');
        -> 'yes'
mysql> SELECT IF(STRCMP('test','test1'),'no','yes');
        -> 'no'

Это действительно забавный нечитаемый способ не использовать a.entity_id IS NULL.

0 голосов
/ 27 августа 2011

Похоже, что это предложение будет иметь значение 0, если a.entity_id не равно нулю, и 1 в противном случае.

0 голосов
/ 27 августа 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...