Heart..pumps blood.Has nothing to do with emotion! Bored
In dit geval wordt het gewoon aanzien als 'where true'. (Vergelijk het met volgend if statement:
1
| if( 1 ) |
Het is zowiezo beter en duidelijker als je die WHERE zo schrijft:
1
| WHERE 1 = 1 |
https://fgheysels.github.io/
Maar als iets werkt, wil dat nog niet zeggen dat het correct is. Ten eerste heeft het geen enkele toegevoegde waarde, ten tweede is de correcte syntax voor een where 'where veldnaam = waarde' (of is null of between). Where 1=1 zou dan nog beter zijn dan alleen where 1.
[ Voor 9% gewijzigd door OZ-Gump op 19-04-2004 11:18 ]
Wat OZ-Gump zegt klopt ook wel...
Het idee is waarschijnlijk dat die WHERE er staat zodat je netjes al je argumentjes meegeeft met je query.
Daarbij gebruik ik het nooit met '1', alleen maar als ik t nodig heb, ander kost het me weer toetsenbordslijtage
Nee, 1 is een integerOZ-Gump schreef op 19 april 2004 @ 11:16:
Where is in proncipe een true of false statement. En 1 is true. En dus krijg je dan gewoon alles terug. En dus lijkt het juiste SQL.
En die kan weliswaar geconverteerd worden naar true, maar is niet hetzelfde als true.
'1' is niet true, 1 is een getal. Dit werkt dus niet in T-SQL:OZ-Gump schreef op 19 april 2004 @ 11:16:
Where is in proncipe een true of false statement. En 1 is true. En dus krijg je dan gewoon alles terug. En dus lijkt het juiste SQL.
DECLARE @foo int
SET @foo = 1
IF @foo
BEGIN
--bla
END
Je moet expliciet testen, en terecht. In VB is true gelijk aan -1 bv
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
maar dan is het eigenlijk hetzelfde doen als true a/e boolean assignen.
https://fgheysels.github.io/
Neewhoami schreef op 19 april 2004 @ 11:44:
Ik kan me voorstellen dat het in T-SQL wel werkt als je van foo een BIT maakt.
maar dan is het eigenlijk hetzelfde doen als true a/e boolean assignen.
je krijgt een foutmelding
Oops! Google Chrome could not find www.rijks%20museum.nl
1
2
| use Northwind; select * from Orders where true; |
Geeft vriendelijk doch dringend:
1
2
| Server: Msg 170, Level 15, State 1, Line 2 Line 2: Incorrect syntax near ';'. |
Ik had het hier vandeweek toevallig nog met een collega over, we vonden het ook een beetje vreemd daar dit gewoon een geldige boolean condition is. Maja, iemand zin om de ANSI-standards te spitten?
In SQL Server heb je ook geen boolean velden; dat zijn daar BIT velden met die dus enkel 0 of 1 kan bevatten.
https://fgheysels.github.io/
Oh jawhoami schreef op 19 april 2004 @ 13:11:
SQL Server kent het keyword 'true' niet.
In SQL Server heb je ook geen boolean velden; dat zijn daar BIT velden met die dus enkel 0 of 1 kan bevatten.
Verwijderd
1
2
3
4
5
6
7
8
| SQL> select * from dual where 1;
select * from dual where 1
*
ERROR at line 1:
ORA-00920: invalid relational operator
SQL> |
Raar dus. Kan het wel standaard ansi syntax zijn maar het is geen standaard sql syntax (SQL=structured Query Language, remember).
Sommige implementaties van de SQL standaard hebben andere casts tussen datatypes dan er in de standaard staan. Als er een cast is van integer naar boolean dan valt te verwachten dat jouw predicate wel werkt.
Het is grappig dat je MySQL en Access aanhaalt, en daarbij naar Access loopt te sneren. MySQL is namelijk in dit opzicht vele malen fouter dan Access. In MySQL heb je bijvoorbeeld een impliciete cast van '' (een lege string) naar 0. Dat zou betekenen dat in MySQL WHERE '' gecast zou moeten worden naar WHERE 0, wat vervolgens gecast zou moeten worden naar WHERE FALSE. Logisch toch? Of niet soms?De titel zegt het eigenlijk al. SQL komt in vele soorten en maten, maar in MySQL en Access (welke vage SQL versie die ook gebruikt)
[ Voor 6% gewijzigd door jochemd op 19-04-2004 13:26 ]
[ Voor 100% gewijzigd door Firefly III op 05-03-2016 15:10 . Reden: Leeg vanwege privacy. ]
Verwijderd
En terecht natuurlijkSlarioux schreef op 19 april 2004 @ 13:29:
Het was niet als sneer bedoelt, sorry. Een leraar van mij loopt er wel constant op te zeiken idd, die is helemaal oracle fan.
't Is wel precies wat PHP ook doet, dus dan is het wel logisch, aangezien ze zo vaak in combinatie gebruikt worden, moet je de gebruiker niet te veel in de war makenjochemd schreef op 19 april 2004 @ 13:25:
Het is grappig dat je MySQL en Access aanhaalt, en daarbij naar Access loopt te sneren. MySQL is namelijk in dit opzicht vele malen fouter dan Access. In MySQL heb je bijvoorbeeld een impliciete cast van '' (een lege string) naar 0. Dat zou betekenen dat in MySQL WHERE '' gecast zou moeten worden naar WHERE 0, wat vervolgens gecast zou moeten worden naar WHERE FALSE. Logisch toch? Of niet soms?
't Is alleen wel weer raar dat '0' in MySQL waarsch ook naar false evalueert en dat dat in PHP juist naar true evalueert
[ Voor 9% gewijzigd door ACM op 19-04-2004 13:38 ]
Het hele probleem van MySQL is dat ze tegen elke prijs willen voorkomen dat de gebruiker een foutmelding krijgt. Ze hebben kennelijk niet begrepen dat foutmeldingen een feature zijn, ze vertellen je dat je iets fout hebt gedaan.ACM schreef op 19 april 2004 @ 13:37:
[...]
't Is wel precies wat PHP ook doet, dus dan is het wel logisch, aangezien ze zo vaak in combinatie gebruikt worden, moet je de gebruiker niet te veel in de war maken
't Is alleen wel weer raar dat '0' in MySQL waarsch ook naar false evalueert en dat dat in PHP juist naar true evalueert
Bij mijn weten heeft de SQL-92 standaard (sql-99 wel dacht ik) geen definitie voor 'boolean'. Het kent wel een expressie die true of false kan zijn, maar je kunt geen variable of field definieren van het type boolean.jochemd schreef op 19 april 2004 @ 13:25:
WHERE 1 is volgens de SQL standaard (ISO 9075:2003) geen geldig predicate. Een predicate moet een "condition that can be evaluated to give a boolean value" bevatten. Aangezien er in de standaard geen impliciete cast is van INTEGER naar BOOLEAN voldoet jouw predicate daar niet aan.
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
We zijn inmiddels al bij SQL:2003 aangeland.
Mja, maar dat is niet meer dan papiervulling. De meeste databases ondersteunen de SQL-92 standaard niet eens volledig.
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
in PHP evalueert '0' ook naar false hoorACM schreef op 19 april 2004 @ 13:37:
't Is alleen wel weer raar dat '0' in MySQL waarsch ook naar false evalueert en dat dat in PHP juist naar true evalueert
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.