Autor Zpráva
leonek
Profil
Dobrý den

Můžete mi pls překontrolovat následující část dotazu:
WHERE hrom1 != '' OR hrom1 != '0' OR hrom1 is not null

Bohužel mi to vyhodí i řádek s hodnotami (v tomto sloupci) 0 nebo prázdné. Dodnes mi to všude fungovalo...

Děkuji za případnou pomoc.
Taps
Profil
leonek:
A co přesně potřebuješ ?
Virtus
Profil
Zdravím,
místo OR použí AND. A tady příklad, který ti snad pomůžou pochopit co je na té podmínce špatně:
mám tabulku(tab1) o jednom sloupci(hrom1) která obsahuje taková to data (první řádek je název sloupce):
+-----+
|hrom1|
+-----+
| NULL|
+-----+
|     |
+-----+
| 0   |
+-----+
Pro úplnost si vysvětlíme jak funguje logický operátor OR, česky NEBO:
0 OR 1 = 1
true OR false = true
pravda OR nepravda = pravda
0 OR 0 OR 1 = 1
tedy jakmile je jedna z hodnot logická 1 (pravda,true) je automaticky celý výraz vyhodnocen jako pravdivý.
Klauzule WHERE je v databázi aplikována vždy na jeden řádek, a to tím způsobem, že pokud je výsledkem podmínek pravda, tedy logická 1, řádek splňuje podmínku a je zařazen do výběru. Další věc, kterou je potřeba znát, jak se databáze chová k jednotlivým hodnotám v konkrétní podmínce:
SELECT * FROM tab1 WHERE hrom1 IS NOT NULL
+-----+
|hrom1|
+-----+
|     |
+-----+
| 0   |
+-----+
SELECT * FROM tab1 WHERE hrom1 != 0 
SELECT * FROM tab1 WHERE hrom1 != NULL
SELECT * FROM tab1 WHERE hrom1 NOT IN(NULL)
SELECT * FROM tab1 WHERE hrom1 NOT IN(0)
+-----+
|hrom1|
+-----+
SELECT * FROM tab1 WHERE hrom1 != ''
SELECT * FROM tab1 WHERE hrom1 NOT IN('')
+-----+
|hrom1|
+-----+
| 0   |
+-----+
SELECT * FROM tab1 WHERE hrom1 != '0'
+-----+
|hrom1|
+-----+
|     |
+-----+
Takže závěrem teda zkusme s těmito informacemi aplikovat podmínku z [#1]:
+-----+
|hrom1|
+-----+
| NULL|  [ (NULL != '') = log. 0, (NULL != '0') = log. 0, (NULL is not null) = log. 0 ] => 0 OR 0 OR 0 = 0, tento řádek nebude ve výsledku
+-----+
|     |  [ ('' != '') = log. 0, ('' != '0') = log. 1, ('' is not null) = log. 1 ] => 0 OR 1 OR 1 = 1, tento řádek bude ve výsledku
+-----+
| 0   |  [ (0 != '') = log. 1, (0 != '0') = log. 0, ( 0 is not null) = log. 1 ] => 1 OR 0 OR 1 = 1, tento řádek bude ve výsledku
+-----+
PS.: testováno na MariaDB 5.5.38, a snad sem v tom neudělal chybu ;)
leonek
Profil
Ano, funguje perfektně.

Pro mě nejdůležitější informace:
jakmile je jedna z hodnot logická 1 (pravda,true) je automaticky celý výraz vyhodnocen jako pravdivý.

Děkuji Virtusi za velmi podrobnou odpověď... :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: