Jakaś alternatywa dla OR?

Jakaś alternatywa dla OR?
KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
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';

YA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2386
0

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

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
0
Kopiuj
Where Name in('Krzysiek','Tomek')
KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
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.

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
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.

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

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

SI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 117
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.

W2
  • Rejestracja: dni
  • Ostatnio: dni
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.

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
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ł?

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
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

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
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

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
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.

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

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

Miang
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1814
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.