Согласно MySQL doco for an expression, ваше выражение a = b = c
использует следующую форму: boolean_primary
comparison_operator: = | >= | > | <= | < | <> | !=
boolean_primary:
boolean_primary comparison_operator predicate
и поэтому эквивалентно:
(a = b) = c
Это означает, что вы получите значение в правда от a = b
, а затем сравнить , что с c
.
В MySQL тип boolean
равен equivalent to tinyint(1)
, где 0
является ложным, а все остальное является истинным. Следовательно, это просто интегральное значение, которое можно сравнить с другим.
Далее, результат сравнения экспрессии как a = b
will always return0
для ложной, 1
для истинно, или NULL, если любой входной NULL.
Поэтому для выражения a = b = c
, чтобы быть правдой, ни один из них не могут быть NULL, и один из следующих должно быть правдой:
a
равно b
и c
равно 1
; или
a
не соответствует b
и c
равен 0
.
Это почти наверняка не то, что вы хотите, правильная форма является второй.
Вместо этого используйте 'Inner Join' – RubahMalam
Хммм, почему это исправить? – Zhouster
Я этого раньше не видел. Вы уверены, что это не просто оценка одной из этих эквивалентов и применение ее как Intoolean к следующему? (Хорошо, да, я просто использовал термин. Я имею в виду логический, который впоследствии интерпретируется как целое число со значением 0 или 1.) Или это действительно допустимый синтаксис в MySQL? –