2013-02-27 8 views
7

Właśnie odkryłem you can write coś podobnegoMySQL "nieznany"

SELECT NULL IS UNKNOWN 

która zwraca 1.

Czy są inne miejsca, z których można korzystać UNKNOWN? Nie wydaje się być słowem kluczowym (nie można wykonać SELECT UNKNOWN). NULL IS NULL jest również prawdziwe, więc jaki cel ma UNKNOWN?

Odpowiedz

9

UNKNOWN tylko aliasem BOOLEANNULL ... taki sam sposób, TRUE tylko aliasem 1 i FALSE właśnie aliasem 0, ponieważ in MySql BOOLEAN itself is just an alias for TINYINT(1)

Dlaczego to nawet tam? Ponieważ jest to część standardu SQL-92:

<truth value> ::= 
       TRUE 
       | FALSE 
       | UNKNOWN 

Dlaczego można SELECT NULL, SELECT TRUE, SELECT FALSE, ale nie SELECT UNKNOWN? Prawdopodobnie po prostu błąd, since UNKNOWN itself wasn't supported until newer versions of MySql.

+3

+1 z niewielkim wyprzedzeniem: uznanie 'TRUE' jako aliasu dla' 1' jest nieco mylące, ponieważ '2 JEST PRAWDĄ' (i każdą inną niezerową liczbą całkowitą), ale w rzeczywistości nie można wykonać polecenia' SELECT 2 IS 1' – Mchl

1

Jego jedynym zastosowaniem jest opisanie wartości boolowskiej, która nie ma żadnej znanej wartości. Tak jak w pierwszym przykładzie, jest to boolean odpowiednik NULL.

+0

Dlaczego po prostu boolean? "SELECT" działa asdf 'IS UNKNOWN'. –

+0

Ponieważ w MySQL 'NULL IS UNKNOWN' i oczywiście możesz" SELECT "asdf 'IS NULL'. – Mchl

2

Wydaje mi się, w MySQL, UNKNOWN to alias dla NULL, używany w znaczeniu boolowskim.

udało mi się znaleźć to odniesienie:

w SQL, wszystkie operatory logiczne wartość PRAWDA, FAŁSZ, lub NULL (brak danych).

MySQL docs - 12.3.3. Logical Operators

Niektóre więcej informacji o ogólnym NULL SQL i nieznane:

Kiedy ograniczone przez ograniczenie NOT NULL, SQL LOGICZNA działa jak typu Boolean z innych języków. Jednak bez ograniczeń typ danych BOOLEAN , pomimo swojej nazwy, może zawierać wartości prawdziwości TRUE, FALSE i UNKNOWN, z których wszystkie są zdefiniowane jako literały boolean zgodnie ze standardem. Standard również zapewnia, że ​​NULL i UNKNOWN "mogą być używane zamiennie, aby oznaczać dokładnie to samo".

NULL on Wikipedia

+0

To nie jest alias. Jak wskazałem, możesz zrobić "SELECT NULL", ale nie "SELECT UNKNOWN". Masz na myśli, że jest to w gruncie rzeczy alias używany w połączeniu z operatorem 'IS'? – mpen

+0

@Mark Zasadniczo wydaje się być brakującą trzecią wartością logiczną :). Do tej pory wydaje się, że działa tylko z 'IS' i' IS NOT'. – kapa