Üdvözöl psql 7.4.23, a PostgreSQL interaktív terminál.
# SELECT szerzo, count(szerzo) FROM Konyv WHERE szerzo = 'Karinthy Frigyes' GROUP BY szerzo;
Karinthy Frigyes | 7
# SELECT szerzo, count(szerzo) FROM Konyv WHERE szerzo LIKE 'Karinthy Frigyes' GROUP BY szerzo;
Karinthy Frigyes | 59
Szerintem a két eredménynek meg kellene egyeznie.
A táblában a Karinthy-knál nem találtam rejtett karaktert, semmi abnormális dolgot. Mi lehet az oka az eltérésnek?
szaszi
- 1241 megtekintés
Hozzászólások
A PostgreSQL mindig is az egyik legprofibb módon dokumentált termék volt, most is teljesen világosan fogalmaz:
"string LIKE pattern [ESCAPE escape-character]
string NOT LIKE pattern [ESCAPE escape-character]
Every pattern defines a set of strings. The LIKE expression returns true if the string is contained in the set of strings represented by pattern. (As expected, the NOT LIKE expression returns false if LIKE returns true, and vice versa. An equivalent expression is NOT (string LIKE pattern).)
If pattern does not contain percent signs or underscore, then the pattern only represents the string itself; in that case LIKE acts like the equals operator."
Forrás: http://www.postgresql.org/docs/8.3/static/functions-matching.html
Az általad kiadott két select között egy lényeges különbség lehet: az "="-s keresés használja a mezőhöz tartozó indexet (ha van), a "%"-s pedig biztosan nem.
Tehát az eltérést okozhatja egy sajnálatos indexhiba.
Csinálj egy importot egy szűz adatbázisba, és ott próbáld ki. Nagyobb összeget tennék rá, hogy nem lesz eltérés a két select között...
Ha zöld ágra vergődtél, a végeredmény érdekelne.
Üdv: Styg.
- A hozzászóláshoz be kell jelentkezni
> in that case LIKE acts like the equals operator
Én is így tudtam, ezért a kérdés előtt el is olvastam ezt, és ezért kérdeztem.
> Nagyobb összeget tennék rá
Nyertél volna :-)
Először új adatbázis, tábla és index próbálkozással jó volt.
Aztán az eredetiben töröltem a konyv_szerzo indexet, majd újra létrehoztam (biztos lehetett volna valahogy aktualizálni), és úgy is jó lett.
Köszönöm!
szaszi
PS: nem partial index!
- A hozzászóláshoz be kell jelentkezni
Részleges index használata esetén előfordul ilyesmi. Valószínűbb, mint az indexhiba.
http://www.postgresql.org/docs/8.3/static/indexes-partial.html
- A hozzászóláshoz be kell jelentkezni
Nem játszottam még partial indexszel, viszont végigolvastam ezt:
http://www.postgresql.org/docs/8.3/static/indexes-partial.html
Nekem nem jött le belőle, hogy partial index megmagyarázná a fenti két select közti eltérést.
- A hozzászóláshoz be kell jelentkezni