- 1
and (ss_1<>'SS0001' or ss_1<>'SS0002' or ss_1<>'SS0010')
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−176
and (ss_1<>'SS0001' or ss_1<>'SS0002' or ss_1<>'SS0010')
Сегодня на продакшене было обнаружено гениальное выражение в одном из запросов.
Подсказки:
1. Вот это вменяемое выражение:
2. Вот это тоже вменяемое выражение:
3. Вот это совершенно НЕвменяемое выражение:
4. Подсказка кэпа: ss_1 не может быть одновременно равно 'SS0001' И 'SS0002' И 'SS0010', потому что в SQL (и даже в PHP, о, боже!) 'SS0001' <> 'SS0002' <> 'SS0010'.
Хоть одно из выражений вида ss_1=='текст' должно не выполниться, если все тексты разные => хоть одно из выражений вида ss_1<>'текст' обязательно выполнится (если все тексты разные).
http://psizin.livejournal.com/134782.html?thread=413054&mode=reply
:D
Все говорят, но не многие знают в каком...
написать
Так труднее догадаться.
Да хотя бы так:
http://www.wolframalpha.com/input/?i=s%21%3D1+or+s%21%3D2+or+s%21%3D3
Кстати, SymPy так умеет?
SymPy умеет едва ли не всё, но не умеет упрощать булевы выражения.
>> SELECT 1 = NULL;
NULL
>> SELECT 1 <> NULL;
NULL
NULL при сравнении с любым значением и на равенство, и на неравенство даст NULL.
Ебланство какое, правда?
We all give the best
Every minute of an hour,
Don't think about the rest.
Теперь даже горилла поняла, что правильный ответ ss_1 IS NOT NULL, а не ss_1 <> NULL.
Создатели «SQL», введя нулябля, сломали аристотелеву логику. В «SQL» выражение (B or not B) может быть не равно единице, поэтому даже упрощать формулы нельзя.
В сишке ничего из этого нет.
В копилку «совпадений»:
https://youtu.be/pATX-lV0VFk
https://youtu.be/5ZBgP48WrNA
https://youtu.be/zIV-vFk0HWU
По сравнению с оригиналом слишком бледно.