Jakaś alternatywa dla OR?

0

Witam,
zastanawiam się nad taką sytuacją, w warunku WHERE uwzględniam kilka OR'ów, czy jest jakaś opcja, żeby w momencie kiedy pierwszy OR zostanie spełniony nie sprawdzał kolejnych?

np.
CREATE TABLE pracownicy(name varchar);

INSERT INTO pracownicy VALUES('Krzyś');

SELECT * FROM pracownicy
WHERE name = 'Krzyś' OR name = 'Marysia' OR name = 'Iza';

0

Doprecyzuj co to znaczy "nie sprawdzał kolejnych"? Albo inaczej, co ma zwrócić zapytanie?

0
Where Name in('Krzysiek','Tomek')
0

Ja to rozumiem tak, że w tym momencie sprawdzi zarówno czy name jest = Krzyś, później sprawdzi czy name = Marysia oraz czy name = Iza, a chodzi mi o to żeby jeśli sprawdzi, czy name = Krzyś, to żeby nie sprawdzał kolejnych warunków.

0

No ale to bez sensu. Jeden warunek z listy spełniony i rekord wpada, tym bardziej, że nie robisz żadnych like'ów czy innych przybliżeń. Przeciez Tomek nie może stać się jednocześnie Ireną więc nie rozumiem czemu nie pasuje Ci OR albo IN.

0

Jeśli będzie 100 OR'ów to będą sprawdzane wszystkie? Nawet jeśli ten pierwszy już będzie się zgadzał?

0
Kasztaniaki napisał(a):

Jeśli będzie 100 OR'ów to będą sprawdzane wszystkie? Nawet jeśli ten pierwszy już będzie się zgadzał?

Jasne, że tak - tyle, że dla wszystkich rekordów.
Jeden rekord nie może mieć pola name = "Magda" i np. "Katarzyna" - zgadza się?

Jeżeli Twoje zapytanie do momentu WHERE będzie zwracało 3 rekordy:

id | name

1 | Magda
2 | Katarzyna
3 | Julia

i Twój WHERE będzie zawierał:
`WHERE name IN ('Magda', 'Katarzyna')

ALBO

WHERE name = 'Magda' OR 'Katarzyna'

to w obu przypadkach dostaniesz dwa rekordy - id 1 i 2.
Jeżeli dodasz do IN jeszcze Julia to uzyskasz wszystkie trzy.

0

A dlaczego miałby nie sprawdzać wszytskich ? Szukasz wszytskich rekordów dla których imie to: XXX lub YYY lub ZZZ. Dlaczego niby miałby skończyć sprawdzanie już po pierwszym ?
Sprecyzuj co chcesz osiągnąć tym zapytaniem.

1

@sintloer: a ja myślę, że to byłaby bzdura. Po co sprawdzać resztę skoro jest OR i reszta nie ma znaczenia jeżeli warunek wpadł?

2

ale on nie sprawdza kolejnych. Taki OR możesz zastąpić konstrukcją IN - name in ('Krzyś', 'Marysia', 'Iza')

Panowie, pytaczowi chodzi o sprawdzanie kolejny WARUNKÓW a nie rekordów. Przy warunkach OR sprawdzane jest do pierwszego zwracającego True (bo cokolwiek OR true = true) a przy AND do pierwszego False

0

Właśnie o to mi chodzi, czy da się to jakoś obejść i jeśli pierwszy warunek jest prawdziwy, żeby nie sprawdzał już pozostałych 99

1

Ojej no przecież tak robi: OR only evaluates expressions until it find a TRUE result.

https://stackoverflow.com/questions/473943/sql-or-operator-how-does-it-work-in-the-following-scenario
Przecież inne działanie OR byłoby kompletnie bez sensu.

0

Właśnie o taką odpowiedź mi chodziło, nie byłam co do tego pewna. Dziękuję :)

0

gdyby to był Or po dwóch różnych polach i każde byłoby indeksowane chyba mógłby dwa razy odczytać rekord, oczywiście w wyniku pokazany tylko raz

1 użytkowników online, w tym zalogowanych: 0, gości: 1