mysql objaśnienie działania zapytania

mysql objaśnienie działania zapytania
  • Rejestracja: dni
  • Ostatnio: dni
0

mam prośbę myście mi wyjaśnili jak działa zapytanie

Kopiuj
select * from tabelka t1 
inner join tabelka2 t2 on 
t1.item = 0 or  (  t1.item = t2.item AND  (   t1.cat = 0 OR t1.cat = t2.cat    )  )

pytania:

  1. czy baza danych sprawdza cokolwiek w nawiasie jeżeli od razu napotka wartość t1.item = 0 ? czy po prosty ten pierwszy OR się w ogóle wtedy wykonuje?
  2. analogicznie jeżeli w pierwszym nawiasie t1.item nie będzie równe t2.item to czy pierwszy AND się w ogóle wykona?
AP
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Polska, Pszczyna
0
  1. A czy t1.item nie może być typu int o wartości 0? Oczywiście, że wykonuje się wszystko.
  2. Jeżeli nie zostanie spełniony pierwszy warunek, to w przypadku operacji AND po co sprawdzać drugi?
  • Rejestracja: dni
  • Ostatnio: dni
0

skoro w 1. piszesz, że sprawdza się wszystko, to czemu w 2. piszesz, że "po co"?
czy mam to rozumieć tak, że jeśli jest OR to obie strony są sprawdzane zawsze, nawet jak już pierwsza strona zwraca true?
a w przypadku AND jak chociaż jedno false to nie sprawdza dalej?

[quote]
A czy t1.item nie może być typu int o wartości 0?
[/quote]
tam są same liczby, tylko mogą mieć różne wartości a ten warunek ogólnie wyciąga dokładnie to, co potrzebuję

tylko się tak zastanawiam nad działaniem tego zapytania

AP
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Polska, Pszczyna
0

Jeżeli pierwsza część warunku jest spełniona, ta przed pierwszym OR to po co ma sprawdzać dalej? Natomiast jeżeli nie jest ona spełniona to sprawdza drugi warunek, sprawdza jego pierwszą część, jeśli jest spełniona to sprawdza jego dalszą część, bo masz tam AND i jeżeli

Kopiuj
t1.cat = 0 OR t1.cat = t2.cat

jeden z tych warunków jest spełniony to spełniony jest cały drugi warunek. Z kolei jeżeli już to t1.item = t2.item

Kopiuj
 nie jest spełnione to dalej nie sprawdza.
  • Rejestracja: dni
  • Ostatnio: dni
0

no i wlasnie o to mi chodzilo :) dzieki za informacje :)

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.